外观
旧联机版源码案例导读
根目录 sc2.2network/Plugins 已包含可编译案例,比脱离版本的代码片段更适合学习。下面只概括设计,不转载闭源仓库代码。
| 示例目录 | 可以学习什么 | 阅读重点 |
|---|---|---|
ChestLock | 箱子锁与持久化 | 事件注册、按世界保存 JSON、玩家交互校验 |
BaseAntiCheatPlugin | 组合式反作弊 | 多个事件接口、配置拆分、校验职责边界 |
AntiXrayPlugin | 服务端信息隐藏 | 区块/方块数据处理及性能成本 |
TerritoryAntiCheatPlugin | 区域保护 | 放置、破坏与交互事件如何共同形成权限边界 |
ServerOutputEnhancePlugin | 终端增强 | 提示与状态 Provider 的注册方式 |
WatchDogPlugin | 进程监控 | 内存观察、异常恢复与重启策略 |
ChatSyncPlugin | 聊天同步 | 消息事件和外部通信的线程/失败处理 |
ServerSwitchPlugin | 服务器切换 | 玩家状态与网络交互边界 |
推荐阅读顺序
- 先查看每个
.csproj的net10.0与服务端项目引用。 - 找到
ServerPlugin子类,记录Initialize、Load、Save、Update各自职责。 - 搜索
RegisterEvent一类调用,沿事件接口查看触发时机和返回值。 - 检查配置和数据写到哪里,是否会随世界切换。
- 最后再看反作弊与网络插件,因为它们更依赖旧联机版内部实现。
编写命令
独立命令可继承 AbstractProcessCmd。需要实现的核心成员包括 Cmd、Introduce、AuthLevel、Display 和 ProcessCmd,并可通过 GetSuggestions 提供补全。输出时要区分服务端终端与客户端消息,权限判断必须放在服务端执行。
迁移价值判断
- ChestLock 一类业务规则可以迁移“数据模型与校验思路”,但事件注册需要重写。
- 反作弊、网络切换和同步插件高度依赖旧联机内部数据,应视为重做项目。
- 终端 Provider 只有在插件联机版提供对应宿主能力时才能迁移。
- 无源码 DLL 无法可靠适配新程序集;长期服应优先使用有源码、许可清楚的插件。
公开示例还可查看 SC-SPM/sc-server-plugin。使用前务必对照目标服务端版本和许可。
