Skip to content

Repository files navigation

PSCFaction

LabAPI Version SCP:SL License

面向 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 整目录发布。

安装

  1. 确认 LabAPI、HintServiceMeow、Harmony 和 AudioManagerAPI 能从服务器启动日志正常加载。
  2. bin/Release/PSCFaction.dll 放入对应端口的 LabAPI 插件目录。
  3. 首次加载后检查插件端口级配置目录中生成的 config.yml(玩法参数)与 translation.yml(显示文本)。
  4. 重启后检查日志中没有 FileNotFoundExceptionTypeLoadExceptionMissingMethodException 或音频资源注册错误。

插件加载已有配置时只读取和校验,不会重写、删除未知键或改变人工排版。需要带中文注释的新模板时,先手动备份并重命名旧文件,让插件生成新模板,再逐项人工迁入已核对的值。旧 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,插件按精确键在同一进程内只注册一次;停止旧会话失败且无法确认失效时不会启动替换会话,以避免叠音。

Remote Admin 命令

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/SpawnedSetRole 内部同步触发是当前实现的前提,若宿主改为异步派发需重新验证。

许可证

本项目以 GPL-3.0 协议开源。

About

SCP:SL LabAPI 派系插件——PSC 情报探员、正常增援与应急叛变玩法

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages