• 注册
  • Neko Manager Neko Manager 关注:419 内容:97

    [早期测试版本更新]【4.0.12+】一个让SPTV3MOD无损运行在SPT4服务端的项目-Spark Connector(花火互联)【原创】

  • 查看作者
  • 打赏作者
  • 当前位置: ODDBA社区 > Neko Manager > 正文
  • 284
  • Neko Manager
  • 版主
    自成一派
    该内容使用了刷新卡,原发布时间:1个月前

    ———————————————–

    Spark Connector(花火互联)
    更新日志

    0.1.2 — 2026-07-30

    本体: 0.1.2 运行时: 0.1.103

    针对社区反馈的一轮兼容性修复。部署后若运行时标记不匹配,会自动清空并重解压 user/spark-connector-runtime/

    重要修复

    • 配置回写致命错误exportDirtyConfigs 对参数双重 JSON.stringify,导致 V3 对 ConfigServer 的修改几乎从未合入 V4。现已改为正确传参,TMS / Softcore / 商人与任务相关配置类模组可真正生效。

    • 配置深层修改未标记脏数据trackConfigMutations 仅 Proxy 顶层赋值,嵌套 cfg.a.b = x 不会回写。现改为深 Proxy,嵌套修改会触发 mergeConfig

    • V3 模组 npm 依赖找不到require("tsyringe") 等无法解析到 Connector 运行时 node_modules。现通过 NODE_PATH + module-alias + 常见包显式 alias 提升依赖。

    • CustomItemService.createItemFromClone 反序列化失败locales 中混入 Width 等非语言键时,V4 报 LocaleDetails 错误。现对 create 入参清洗,非法键迁入 overrideProperties

    • tkf-SuperMod 离线兼容在 Node 22 失效Object.defineProperty(_resolveFilename) 失败后静默跳过。现先加载 path compat,再以 assignment 包装 resolve。

    • 单模组卡死拖垮整服runPhase 无超时。现每模组阶段上限 120 秒,超时跳过该模组后续逻辑并继续加载。

    • BaseClasses 常量尾空格:3.8 / 3.10 API 源中 COMB_MUZZLE_DEVICE 带尾空格导致类型校验爆红;已修正源码,并在 pack-runtime 时消毒。

    诊断改进

    • 配置 / 数据库 merge 时,若 V3 字段在 V4 模型上不存在,首次以 WARN 提示(例如已移除的 insuranceMultiplier),便于区分「合入成功」与「字段被忽略」。

    • 部分 WARN 可能因 JSON 名与 CLR 属性名不一致([JsonPropertyName])或嵌套 Dictionary 路径产生误报Merged V3 config changes into spt-* 表示整份配置已触发合并,被标 ignored 的键不一定全部生效。后续版本将改进按 JsonPropertyName 解析与嵌套字典合并。

    版本号

    Build.props / 程序集

    0.1.2

    ConnectorMetadata

    0.1.2

    RuntimeBundleVersion

    0.1.103

    shim package.json

    0.1.2

    建议回归

    • Tarkov Weather System(依赖 tsyringe,无需再手动 npm install

    • Tarkov More Settings / Softcore(配置是否进游戏)

    • 暗区装备等 createItemFromClone 自定义物品模组

    • 自定义商人跳蚤 / loyal_level_items(若仍报错,属 assort 数据完整性问题,与本版配置通路分开排查)


    0.1.1.0(帖内 Hotfix)

    • 修复商人加载问题。


    0.1.0.1(帖内 Fix)

    • 修复内置 Node.js runtime 检测问题。


    0.1.0

    • 首个早期测试版本:V3→V4 兼容层、生命周期、数据库代理、DI、HTTP/WS、内置 Node 运行时。

    SPT V3 → V4 兼容层 —— 在 SPT 4 服务端上加载并运行 SPT V3(Node.js / TypeScript)模组,无需修改模组源码
    注意事项:
    遇到任何问题请回复在此贴下面,带完整服务端截图,方便迭代更新

    将SPT文件夹解压到游戏根目录后启动一次服务端

    然后将会在SPT/user/下生成mods-v3文件夹

    将SPT3.X版本的mod放入mods-v3后启动服务端即可加载使用,兼容性任有待测试,请务必备份文件后使用!


    一、项目简介

    Spark Connector 是一个 SPTV4 服务端 Mod,灵感源自 Minecraft 的 Sinytra Connector(跨版本模组加载器)。它的核心目标是在 SPT 4(C# / .NET 9)服务端上透明运行 SPT V3(Node.js / TypeScript)时代的所有模组。V3 模组开发者无需做任何适配,用户只需安装 Spark Connector 并将 V3 模组放入指定目录,即可在 SPT 4 上运行。

    核心特性

    • 零修改运行:V3 模组无需改动源码,直接加载运行

    • 全生命周期支持preSptLoadpostDBLoadpostSptLoad 三阶段完整兼容

    • 数据库透明代理:V3 风格的 DatabaseServer.getTables() / setTables() 自动映射到 V4 数据结构

    • 运行时方法替换:基于 HarmonyX 的 afterResolutionuseToken 整类替换

    • HTTP 路由桥接:静态路由、动态路由、HTTP 拦截器、图片资源路由全部兼容

    • WebSocket 支持:V3 模组的 WebSocket 连接处理器自动注册

    • 内置 Node.js:附带 Node.js 运行时,终端用户无需安装 Node

    • DI 容器兼容:基于 tsyringe 的 V3 DI 体系在子容器中完整复现


    二、兼容版本

    SPT 服务端

    宿主服务端

    版本

    状态

    SPT V4 (C#)

    4.0.x

    🟢 当前目标

    V3 模组 API

    API 版本

    标识符

    状态

    3.11.x

    sptVersion: ~3.11

    🟢 完整支持

    3.10.x

    sptVersion: ~3.10

    🟢 完整支持

    3.9.x

    sptVersion: ~3.9

    🟢 完整支持

    3.8.x

    akiVersion: ~3.8

    🟢 完整支持

    3.5.x

    akiVersion: ~3.5

    🟢 完整支持

    3.2.x

    akiVersion: ~3.2

    🟢 完整支持

    官方 Mod 示例验证

    对照 SPT 官方提供的全部 6 个版本约 90 个示例 Mod,所有 DI token 和 API 调用均已完成兼容映射,覆盖率 100%
    运行时状态
    [早期测试版本更新]【4.0.12+】一个让SPTV3MOD无损运行在SPT4服务端的项目-Spark Connector(花火互联)【原创】


    三、已实现的转译功能

    3.1 模组生命周期

    生命周期

    V3 钩子

    Connector 实现

    预加载

    preSptLoad / preAkiLoad

    ConnectorBootstrap.PreSptLoadAsync

    异步预加载

    preSptLoadAsync

    Node sidecar 异步执行

    数据库后

    postDBLoad

    ConnectorPostDbLifecycle.OnLoad

    SPT 后

    postSptLoad / postAkiLoad

    ConnectorPostSptLifecycle.OnLoad

    运行时

    OnLoad / OnUpdate

    OnLoadUpdateBridge

    3.2 数据库操作

    能力

    V3 API

    Connector 映射

    读取数据库

    DatabaseServer.getTables()

    TablesSyncService 镜像

    修改物品

    tables.templates.items

    JsonTableMerge 整节合并

    修改 Bot

    tables.bots

    整节 merge

    修改任务

    tables.templates.quests

    含 starter quest 诊断

    修改商人

    tables.traders

    含 assort 引用修复 + V4 商人兼容

    修改藏身处

    tables.hideout

    整节 merge

    修改地图

    tables.locations

    MergeLocationsInPlace

    修改全局配置

    tables.globals

    整节 merge

    本地化合并

    tables.locales

    多语言条目自动合并

    Legacy ID 映射

    非标准 MongoId

    自动检测并转换为有效 V4 MongoId

    自定义物品

    CustomItemService.createItemFromClone()

    GenericServiceFacade 代理

    3.3 配置文件读写

    能力

    V3 API

    Connector 映射

    读取 SPT 配置

    ConfigServer.getConfig(ConfigTypes.XXX)

    ConfigSyncService

    修改 SPT 配置

    config.xxx = yyy

    直接写回 V4 配置对象

    自定义 JSON 配置

    require("../config/config.json")

    FileSystemSync vendor

    JSON5/JSONC 配置

    json5.parse() / jsonc.parse()

    内置 npm 包支持

    异步导入

    ImporterUtil.loadRecursive()

    ImporterUtil vendor

    3.4 HTTP 路由

    能力

    V3 API

    Connector 映射

    静态路由

    StaticRouterModService.registerStaticRouter()

    RouterBridgeRegistry

    动态路由

    DynamicRouterModService.registerDynamicRouter()

    RouterBridgeRegistry

    HTTP 拦截

    HttpListenerModService.registerHttpListener()

    IHttpListener 桥接

    图片资源

    ImageRouter.addRoute()

    ImageRouter.AddRoute()

    自定义路由前缀

    "custom-mymod" / "spt"

    完整支持

    3.5 运行时方法替换

    能力

    V3 API

    Connector 映射

    后置拦截

    container.afterResolution(token, cb)

    afterResolutionMaterializer

    方法替换

    afterResolution 赋值方法

    Harmony Prefix → JS overrideHandlers

    整类替换

    container.register(X, {useToken: Y})

    tokenRedirectRegistry → Harmony

    类扩展

    useClass + 继承

    子类方法扫描 → Harmony override

    method-overrides.json 已预注册 LauncherController.LoginLauncherCallbacks.PingGameController.GameStartWatermark.OnLoad 等关键方法。

    3.6 高级功能

    能力

    说明

    WebSocket

    IWebSocketConnectionHandler + ISptWebSocketMessageHandler 接口注册

    ChatBot

    DialogueController.registerChatBot() 对话机器人注册

    Commando 命令

    CommandoDialogueChatBot.registerCommandoCommand() 自定义命令

    SPT 命令

    SptCommandoCommands.registerSptCommandoCommand() 管理命令

    Bundle 模组

    模型、贴图等资源包自动加载

    Cloner API

    ICloner / StructuredCloner / JsonCloner / RecursiveCloner 完整实现

    跨模组依赖

    loadBefore / loadAfter / modDependencies 拓扑排序加载

    npm 第三方库

    真实 Node.js 运行时,支持任意 npm 包

    TypeScript 即时编译

    .ts 入口文件自动 JIT 编译


    四、DI Token 兼容矩阵

    Spark Connector 的 tsyringe 子容器中注册了 180+ 个独立 DI token,覆盖所有 V3 版本中模组可能解析的服务。以下按类别列出关键 token:

    4.1 核心服务器

    DatabaseServer ConfigServer SaveServer HttpServer WebSocketServer RagfairServer

    4.2 数据库 & 配置

    DatabaseService TablesSyncService ConfigSyncService LocaleService LocalisationService

    4.3 Bot & Raid

    BotController BotGenerator BotHelper BotNameService BotInventoryGenerator BotWeaponGenerator BotLootGenerator BotLevelGenerator BotEquipmentModGenerator BotDifficultyHelper BotWeaponGeneratorHelper PMCLootGenerator PlayerScavGenerator MatchController InraidController InRaidHelper LocationLifecycleService PostDbLoadService LootGenerator LocationLootGenerator CustomLocationWaveService PmcWaveGenerator

    4.4 交易 & 经济

    TraderHelper TraderAssortHelper TraderController TraderAssortService TraderPurchasePersisterService RagfairHelper RagfairController RagfairPriceService RagfairCategoriesService RagfairOfferService RagfairLinkedItemService RagfairRequiredItemsService RagfairTaxService RagfairServerHelper RagfairSortHelper RagfairSellHelper RagfairOfferHelper PaymentService PaymentHelper FenceService InsuranceService

    4.5 物品 & 库存

    ItemHelper InventoryHelper InventoryController HandbookHelper PresetHelper RepairHelper RepairService CustomItemService ItemBaseClassService ItemFilterService HideoutHelper HealthHelper

    4.6 任务 & 成就

    QuestHelper QuestRewardHelper QuestController RepeatableQuestController RepeatableQuestHelper AchievementController PrestigeHelper PrestigeController

    4.7 通讯 & 交互

    DialogueController DialogueHelper NotifierHelper NotificationService NotificationSendHelper MailSendService SptDialogueChatBot CommandoDialogueChatBot SptCommandoCommands GiveSptCommand TraderSptCommand ProfileSptCommand

    4.8 工具类

    JsonUtil HashUtil RandomUtil TimeUtil MathUtil ObjectId FileSystem FileSystemSync VFS EncodingUtil CompareUtil ImporterUtil HttpResponseUtil HttpFileUtil WinstonLogger Watermark

    完整 token204 条映射

    协议

    格式

    用途

    JSON-RPC

    {"id":N,"method":"...","params":{}}

    C# 调用 JS shim

    BRIDGE

    BRIDGE|callId|{type,method,argsJson}

    JS 调用 C# 服务

    BRIDGE B64

    BRIDGE|callId|B64|<base64>

    C# 返回大数据


    六、安装与使用

    6.1 安装

    1. 下载 SparkConnector-YYYYMMDD-HHmmss.zip

    2. 解压到 SPT 服务端根目录,确保目录结构为:

      SPT/user/mods/SparkConnector/SparkConnector.dll
    3. 将 V3 模组放入 SPT/user/mods-v3/ 目录

    4. 启动 SPT 服务端

    6.2 目录结构

    SPT/
    ├── user/
    │   ├── mods/
    │   │   └── SparkConnector/         ← Connector 模组目录
    │   │       ├── SparkConnector.dll  ← 核心 DLL
    │   │       └── runtime/
    │   │           └── win-x64/
    │   │               └── node.exe    ← 内置 Node.js
    │   ├── mods-v3/                    ← V3 模组目录
    │   │   ├── YourV3Mod1/
    │   │   │   ├── package.json
    │   │   │   └── src/mod.ts
    │   │   └── YourV3Mod2/
    │   └── spark-connector-runtime/    ← 运行时解压的 shim
    └── EscapeFromTarkov_Data/

    6.3 注意事项

    • mods-v3 目录中的文件不能含 .js/.ts(SPT V4 的 ModValidator 会拒绝)。Spark Connector 会在加载时自动编译 TypeScript。

    • Spark Connector 模组目录 仅含 DLL,Shim 代码内嵌在 DLL 资源中,首次启动时自动解压。

    • 终端用户 无需安装 Node.js,Connector 自带运行环境。


    七、技术栈

    组件

    版本

    .NET

    9.0

    Node.js (内嵌)

    22.12.0

    TypeScript

    5.7

    HarmonyX

    2.15.0

    tsyringe

    4.8+

    SPT V4 目标

    4.0.13


    八、已知限制

    1. JSON 编组边界:Harmony 拦截的方法参数/返回值经 JSON 序列化,非 plain object 可能丢失类型信息

    2. DatabaseServer.SetTables:V4 仅允许一次初始化,Connector 通过反射替换 TableData 字段回写

    3. RepeatableQuestGenerator 拆分:V4 将单个 Generator 拆为 Exploration/Elimination/Completion/Pickup 四个独立类

    隐藏内容需要回复可以看见

    回复
    初窥堂奥

    6666666666666666666666666666666666

    回复
    初窥堂奥

    太强了佬

    回复
    初窥堂奥
    VIP2

    666666666666

    回复
    初窥堂奥
    VIP2
    赠送了礼物[比心]
    回复
    初窥堂奥

    感谢大佬

    回复
    渐入佳境

    感谢大佬

    回复
    渐入佳境

    666

    回复
    初窥堂奥
    赠送了礼物[赞]
    回复
    初窥堂奥
    赠送了礼物[赞]
    回复

    666

    回复

    请登录之后再进行评论

    登录
    Neko Manager
  • 今日 0
  • 内容 97
  • 关注 419
  • 聊天
    关注 1089

    【招募】GRIFFIN TKF项目开工 期待你的加入 || 你是否想加入格里芬书写自己与人形的故事

    捐助我们

    • 微信
    • 支付宝
  • 签到
  • 任务
  • 发布
  • 模式切换
  • 偏好设置
  • 帖子间隔 侧栏位置: