———————————————–
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 解析与嵌套字典合并。
版本号
|
项 |
值 |
|---|---|
|
|
|
|
|
|
|
|
|
|
shim |
|
建议回归
-
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 模组无需改动源码,直接加载运行
-
全生命周期支持:
preSptLoad→postDBLoad→postSptLoad三阶段完整兼容 -
数据库透明代理:V3 风格的
DatabaseServer.getTables()/setTables()自动映射到 V4 数据结构 -
运行时方法替换:基于 HarmonyX 的
afterResolution和useToken整类替换 -
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 |
|
🟢 完整支持 |
|
3.10.x |
|
🟢 完整支持 |
|
3.9.x |
|
🟢 完整支持 |
|
3.8.x |
|
🟢 完整支持 |
|
3.5.x |
|
🟢 完整支持 |
|
3.2.x |
|
🟢 完整支持 |
官方 Mod 示例验证
对照 SPT 官方提供的全部 6 个版本、约 90 个示例 Mod,所有 DI token 和 API 调用均已完成兼容映射,覆盖率 100%。
运行时状态![[早期测试版本更新]【4.0.12+】一个让SPTV3MOD无损运行在SPT4服务端的项目-Spark Connector(花火互联)【原创】](https://ods6.oddba.cn/user_files/106164/screenshot/60659174_1784039231.png)
三、已实现的转译功能
3.1 模组生命周期
|
生命周期 |
V3 钩子 |
Connector 实现 |
|---|---|---|
|
预加载 |
|
|
|
异步预加载 |
|
Node sidecar 异步执行 |
|
数据库后 |
|
|
|
SPT 后 |
|
|
|
运行时 |
|
|
3.2 数据库操作
|
能力 |
V3 API |
Connector 映射 |
|---|---|---|
|
读取数据库 |
|
|
|
修改物品 |
|
|
|
修改 Bot |
|
整节 merge |
|
修改任务 |
|
含 starter quest 诊断 |
|
修改商人 |
|
含 assort 引用修复 + V4 商人兼容 |
|
修改藏身处 |
|
整节 merge |
|
修改地图 |
|
|
|
修改全局配置 |
|
整节 merge |
|
本地化合并 |
|
多语言条目自动合并 |
|
Legacy ID 映射 |
非标准 MongoId |
自动检测并转换为有效 V4 MongoId |
|
自定义物品 |
|
|
3.3 配置文件读写
|
能力 |
V3 API |
Connector 映射 |
|---|---|---|
|
读取 SPT 配置 |
|
|
|
修改 SPT 配置 |
|
直接写回 V4 配置对象 |
|
自定义 JSON 配置 |
|
|
|
JSON5/JSONC 配置 |
|
内置 npm 包支持 |
|
异步导入 |
|
|
3.4 HTTP 路由
|
能力 |
V3 API |
Connector 映射 |
|---|---|---|
|
静态路由 |
|
|
|
动态路由 |
|
|
|
HTTP 拦截 |
|
|
|
图片资源 |
|
|
|
自定义路由前缀 |
|
完整支持 |
3.5 运行时方法替换
|
能力 |
V3 API |
Connector 映射 |
|---|---|---|
|
后置拦截 |
|
|
|
方法替换 |
|
Harmony Prefix → JS |
|
整类替换 |
|
|
|
类扩展 |
|
子类方法扫描 → Harmony override |
method-overrides.json 已预注册 LauncherController.Login、LauncherCallbacks.Ping、GameController.GameStart、Watermark.OnLoad 等关键方法。
3.6 高级功能
|
能力 |
说明 |
|---|---|
|
WebSocket |
|
|
ChatBot |
|
|
Commando 命令 |
|
|
SPT 命令 |
|
|
Bundle 模组 |
模型、贴图等资源包自动加载 |
|
Cloner API |
|
|
跨模组依赖 |
|
|
npm 第三方库 |
真实 Node.js 运行时,支持任意 npm 包 |
|
TypeScript 即时编译 |
|
四、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 |
|
C# 调用 JS shim |
|
BRIDGE |
|
JS 调用 C# 服务 |
|
BRIDGE B64 |
|
C# 返回大数据 |
六、安装与使用
6.1 安装
-
下载
SparkConnector-YYYYMMDD-HHmmss.zip -
解压到 SPT 服务端根目录,确保目录结构为:
SPT/user/mods/SparkConnector/SparkConnector.dll
-
将 V3 模组放入
SPT/user/mods-v3/目录 -
启动 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 |
八、已知限制
-
JSON 编组边界:Harmony 拦截的方法参数/返回值经 JSON 序列化,非 plain object 可能丢失类型信息
-
DatabaseServer.SetTables:V4 仅允许一次初始化,Connector 通过反射替换
TableData字段回写 -
RepeatableQuestGenerator 拆分:V4 将单个 Generator 拆为
Exploration/Elimination/Completion/Pickup四个独立类
隐藏内容需要回复可以看见









6666666666666666666666666666666666
太强了佬
666666666666
感谢大佬
感谢大佬
666
666