面向 SCP: Secret Laboratory 的 Northwood LabAPI 1.1.7 派系插件。
每回合从设施警卫中随机选出一名 PSC 情报探员,生成在 SCP-127 收容室。探员在广播室正常开始广播即召唤 PSC-S 增援(指挥官 / 下士 / 突击队员 / 战斗工兵),增援从 B 门进入设施,与基金会为友军。若探员在成功呼叫前真实死亡,则改为生成最多 4 人的应急 PSC,整个 PSC 派系进入叛变状态,与所有非 PSC 阵营敌对。
完整玩法契约见 DESIGN.md,术语见 CONTEXT.md。
- SCP:SL 服务器与 Northwood LabAPI 1.1.7
- .NET Framework 4.8.1
- HintServiceMeow 5.5.0(及其上游要求的 Harmony 2.4.2)
- SCPSL-AudioManagerAPI 2.4.2 及其上游运行依赖
这些依赖必须按各自上游说明安装到服务器。发布资产只包含 PSCFaction.dll,不要把 bin/Release 中的宿主或依赖 DLL 整目录发布。
- 确认 LabAPI、HintServiceMeow、Harmony 和 AudioManagerAPI 能从服务器启动日志正常加载。
- 将
bin/Release/PSCFaction.dll放入对应端口的 LabAPI 插件目录。 - 首次加载后检查插件端口级配置目录中生成的
config.yml(玩法参数)与translation.yml(显示文本)。 - 重启后检查日志中没有
FileNotFoundException、TypeLoadException、MissingMethodException或音频资源注册错误。
插件加载已有配置时只读取和校验,不会重写、删除未知键或改变人工排版。需要带中文注释的新模板时,先手动备份并重命名旧文件,让插件生成新模板,再逐项人工迁入已核对的值。旧 config.yml 中遗留的 Translation: 节点会被兼容忽略。
- 情报探员:生成在 SCP-127 收容室。房间锚点由
IntelligenceAgentRoomOffset指定,出生服务会在Spawn.IntelligenceAgentGroundSearchDistance范围内上下搜索可站立地面,并确认眼高位置仍属于该房间。无法解析安全点时保留原生九尾出生点。 - PSC 增援:
Spawn.GateBBasePosition默认为(0,0,0),表示自动使用原生九尾地表出生点作为基准,并按Spawn.GateBSpreadRadius环形撒点让成员互不重叠——开箱即用,不需要先手工测坐标。若要精确定位到 B 门,把实测世界坐标填入GateBBasePosition,并用GateBOffsets指定优先槽位;配置基准点解析出的安全落点不足时会自动回退到原生出生点补足。
所有落点都会检查有限数值、地面坡度、身体胶囊净空和成员间最小距离。世界坐标各轴绝对值不得超过 10000 米,房间/槽位偏移不得超过 100 米。
Audio/cassie.wav:全服 C.A.S.S.I.E 广播音轨。Audio/summon.wav:仅当前 PSC 成员可听的阵营入场音乐;正常与应急共用。
两者都作为嵌入资源编译进 DLL。Cassie.PreferCustomAudioTrack 默认关闭,此时使用原生 C.A.S.S.I.E 文本播报并显示字幕;开启后优先播放 cassie.wav,会话创建失败仍回退原生播报。所有音频资源键必须以 PSCFaction. 开头。
AudioManagerAPI 2.4.2 没有注销资源键的公开 API,插件按精确键在同一进程内只注册一次;停止旧会话失败且无法确认失效时不会启动替换会话,以避免叠音。
psc 只注册到 Remote Admin 面板,能在 RA 面板执行命令即可使用,不需要额外权限节点。
psc help
psc status
psc summon normal
psc summon emergency
psc role <playerId> <roleId>
psc cleanup
角色 ID:1 情报探员、2 指挥官、3 下士、4 突击队员、5 战斗工兵。
每次 psc summon 都会开启新的 RA 测试周期,可反复执行;psc cleanup 清理后立即建立可用状态。测试复位不会改变上一批玩家的原生角色,后续召唤只使用当时实际处于 Spectator 的候选。
dotnet build .\PSCFaction.sln -c Release -t:Rebuild- 应急模式的伤害绕过只清除单次伤害的宿主原生友伤标记,不修改
IsAllowed,也不改变全服友伤设置。该标记通过 SCP:SL 非公开 backing field 访问,属于版本敏感点,每次游戏更新后必须重新验证。 - 战斗工兵门禁只绕过门的原生钥匙卡权限。系统锁定、净化、核弹流程和其他插件的
IsAllowed=false都不会被绕过。若某个插件只设置CanOpen=false而不设置IsAllowed=false,插件无法区分该拒绝与”玩家钥匙卡不足”,这是不可观测的兼容边界。 - CustomInfo 采用行级所有权:本插件只追加并维护
<b>角色名</b>这一行,清理时至多移除一条完全相等的行。若另一插件写入完全相同的富文本行,文本层无法证明归属。 Spawning/ReceivedLoadout/Spawned在SetRole内部同步触发是当前实现的前提,若宿主改为异步派发需重新验证。
本项目以 GPL-3.0 协议开源。