-
Notifications
You must be signed in to change notification settings - Fork 0
Developer
DNTOF edited this page Aug 12, 2026
·
2 revisions
本页面向希望了解或扩展 OmegaWarhead 的插件开发者。
| 组件 | 说明 |
|---|---|
| 语言 | C# (.NET Framework 4.8) |
| 框架 | EXILED 9.x(SCP:SL 14.2.x) |
| UI 系统 | HintServiceMeow (HSM) |
| 自定义物品 | Exiled.CustomItems |
| 协程 | MEC(Exiled 内置) |
OmegaWarhead/
├── OmegaWarheadPlugin.cs # 插件入口(Plugin<Config>)
├── Configs/
│ ├── Config.cs # 插件配置(is_enabled / debug / lang)
│ ├── Constants.cs # 硬编码游戏数值
│ └── Localization.cs # 中英双语文本集中管理
├── Core/
│ ├── NukeSession.cs # 会话数据载体 + 状态枚举
│ ├── NukeSessionManager.cs # 状态机核心(单例)
│ ├── SpawnPointSelector.cs # 元素随机房间刷新
│ ├── TrackingBroadcaster.cs # 全服位置追踪广播
│ ├── AutoUpdater.cs # 自动更新
│ └── StatsTracker.cs # 持久化统计
├── Items/
│ ├── RadioactiveElement.cs # 放射性元素(CustomItem, ID 10001)
│ └── WarheadController.cs # 核弹控制器(CustomItem, ID 10002)
├── UI/
│ └── NukePanel.cs # HSM 四层面板
└── Commands/
└── OwInfoCommand.cs # 管理信息查询指令
插件核心是一个五状态状态机,由 NukeSessionManager(单例)管理:
Idle ──(按K)──▶ Confirming ──(窗口内按K)──▶ Locked ──(角色重置)──▶ Counting ──(归零)──▶ Detonation
│
└──(超时)──▶ Idle
| 状态 | 含义 |
|---|---|
Idle |
持有控制器未激活 |
Confirming |
已按一次 K,等待窗口内二次确认 |
Locked |
二次确认成功,角色重置为 Tutorial |
Counting |
倒计时运行中(268s) |
Detonation |
已引爆,执行全局击杀 |
分支规则:
-
Counting+ 未到不可逆点 + 开核者死亡 → 会话销毁,发射中止 -
Counting+ 已到不可逆点 + 开核者死亡 → 不拦截,继续引爆
插件订阅的 EXILED 事件:
| 事件 | 用途 |
|---|---|
Server.RoundStarted |
启动元素刷新循环 |
Server.RoundEnded / RestartingRound
|
清理会话与协程 |
Player.Dying |
开核者死亡判定 |
Player.Left |
开核者掉线判定 |
Player.PickingUpItem / DroppingItem
|
维护元素持有计数 |
RadioactiveElement.CountChanged |
合成阈值检测(自定义事件) |
🔧 插件内部通过
RadioactiveElement.CountChanged自定义事件解耦"计数维护"与"合成判定"——扩展时优先复用该事件,不要重新扫描背包。
所有玩家可见文本集中在 Configs/Localization.cs,通过 Localization.IsEnglish 布尔值切换。
// 添加新文本的示例
public static string NewMessage => IsEnglish ? "English text" : "中文文本";规则:
- 新增玩家可见文本必须走 Localization,禁止硬编码字符串
- 物品描述≤20 字(中文)或 20 词(英文),过长会在检视界面重叠
- CASSIE 播报字符串同时是语音内容与字幕,保持短语化(如
"WARNING . OMEGA WARHEAD COMPONENT ASSEMBLED")
Configs/Constants.cs 集中管理所有游戏数值:
public const int RequiredElementCount = 5;
public const float CountdownTotalSeconds = 268f;
// ...为什么硬编码? 防篡改——服务器管理员无法通过 config.yml 修改数值,避免不公平。需要可配置版本请联系作者。
Core/AutoUpdater.cs:
- 插件启用时启动后台线程(不阻塞加载)
- 请求 GitHub Releases API 获取最新版
- 对比
OmegaWarheadPlugin.Instance.Version - 发现新版本 → 下载 DLL 到临时文件 → 原子覆盖插件文件
- 下次重启生效
注意:更新失败永远只记录日志,绝不中断插件运行。
git clone https://github.com/DNTOF/OmegaWarhead.git
cd OmegaWarhead
dotnet restore
dotnet build -c Release依赖说明:
- 游戏 DLL(
Assembly-CSharp-firstpass.dll、UnityEngine.CoreModule.dll)位于lib/目录 -
Exiled.CustomItems.dll同样位于lib/(可替换为你服务器的版本) - 建议使用 Visual Studio 2022 或 Rider 开发
- 代码风格:与现有代码保持一致(XML 文档注释 + 中文注释风格)
- 所有玩家可见文本走
Localization.cs - 提 PR 前确保
dotnet build无错误
⚠️ 版权声明:本项目为 DNT_OF 原创,采用 GPLv3 许可证。遵守开源精神的同时,严禁倒卖本插件或修改版本(SCP:SL 圈子存在抄袭倒卖现象,作者保留追究权利)。官方源码:https://github.com/DNTOF/OmegaWarhead