PhantomGamers/SFP
GitHub: PhantomGamers/SFP
SFP 是一款允许用户向新版 Steam 客户端应用自定义皮肤和脚本的工具,通过注入 CSS 和 JavaScript 实现界面个性化。
Stars: 640 | Forks: 10
# SFP(原 SteamFriendsPatcher)
此实用工具允许您向新版 Steam 客户端应用皮肤和脚本。
- [SFP(原 SteamFriendsPatcher)](#sfp--formerly-steamfriendspatcher-)
* [说明](#instructions)
* [功能](#features)
+ [Steam 皮肤](#steam-skinning)
+ [脚本](#scripting)
+ [独立文件夹中的皮肤和脚本](#skins-and-scripts-in-separate-folders)
+ [启用 JavaScript 注入](#enable-javascript-injection)
* [皮肤作者](#skin-authors)
+ [匹配具有可变标题的页面](#matching-against-pages-with-variable-titles)
+ [查找 Steam 页面标题](#finding-steam-page-titles)
+ [使用系统强调色](#using-system-accent-color)
* [待办事项](#todo)
* [已知问题](#known-issues)
* [依赖项](#dependencies)
+ [所有平台](#all)
+ [Linux](#linux)
* [致谢](#credits)
目录由 markdown-toc 生成
## 说明
1. 为您的操作系统下载并解压 [Releases 下的最新 zip 文件](https://github.com/PhantomGamers/SFP/releases/)。
- 如果您已安装 .NET 7,请下载 \_net7.zip 版本;否则,请下载 \_SelfContained.zip 版本。
2. 运行 SFP_UI 应用程序。
3. 默认情况下,SFP_UI 会自动等待 Steam 启动并注入;如果 Steam 已经在运行,则直接注入。
4. 为了实现全部功能,**只要 Steam 在运行,SFP 就必须保持运行并启动其注入器**。
5. Steam 必须带有 `-cef-enable-debugging` 参数运行,SFP 才能正常工作。
- 如果 Steam 是由 SFP 启动的,它会自动添加此参数。否则,您可以使用“强制 Steam
参数”设置,如果 Steam 尚未包含这些参数,它会自动使用所选参数重启 Steam。
- 此设置默认启用
6. 使用 SFP 中的“打开文件”按钮访问应用自定义皮肤和脚本的文件。
有关更多信息及现有皮肤的链接,请参阅 [Steam 皮肤 Wiki](https://steamskins.pages.dev/)
## 功能
### Steam 皮肤
- 读取并应用自定义 CSS 到 Steam 页面。
- 在皮肤配置中自定义哪些文件应用到哪些页面。
- 默认情况下,SFP 从以下位置应用皮肤:
- 用于 Steam 客户端、库和覆盖层的皮肤位于 `Steam/steamui/libraryroot.custom.css`。
- 用于好友列表和聊天窗口的皮肤位于 `Steam/steamui/friends.custom.css`。
- 用于 Steam 商店和社区页面的皮肤位于 `Steam/steamui/webkit.css`。
- 用于大屏幕模式的皮肤位于 `Steam/steamui/bigpicture.custom.css`。
### 脚本
- 读取并应用自定义 JavaScript 到 Steam 页面。
- 在皮肤配置中自定义哪些文件应用到哪些页面。
- 默认情况下,SFP 从以下位置应用脚本:
- 用于 Steam 客户端、库和覆盖层的脚本位于 `Steam/steamui/libraryroot.custom.js`。
- 用于好友列表和聊天窗口的脚本位于 `Steam/steamui/friends.custom.js`。
- 用于 Steam 商店和社区页面的脚本位于 `Steam/steamui/webkit.js`。
- 用于大屏幕模式的脚本位于 `Steam/steamui/bigpicture.custom.js`。
### 独立文件夹中的皮肤和脚本
- 皮肤和脚本也可以添加到 `Steam/steamui/skins` 内的专属文件夹中,然后在 SFP 的设置中进行选择。
### 启用 JavaScript 注入
- JavaScript 注入默认处于禁用状态,必须在 SFP 的设置中手动启用。
- JavaScript 代码可能存在恶意风险,因此请仅安装来自您信任的人的脚本!
## 皮肤作者
如果您想自定义哪些 Steam 页面应用皮肤以及哪些文件应用到每个页面,请在您的皮肤文件夹根目录中包含一个 `skin.json`
文件。
默认的 `skin.json`:
```
{
"Patches": [
{
"MatchRegexString": "^https://([A-Za-z0-9-]+\.)*steampowered\.com(?=/|$)",
"TargetCss": "webkit.css",
"TargetJs": "webkit.js"
},
{
"MatchRegexString": "^https://steamcommunity\.com(?=/|$)",
"TargetCss": "webkit.css",
"TargetJs": "webkit.js"
},
{
"MatchRegexString": "^Steam$",
"TargetCss": "libraryroot.custom.css",
"TargetJs": "libraryroot.custom.js"
},
{
"MatchRegexString": "^OverlayBrowser_Browser$",
"TargetCss": "libraryroot.custom.css",
"TargetJs": "libraryroot.custom.js"
},
{
"MatchRegexString": "^SP Overlay:",
"TargetCss": "libraryroot.custom.css",
"TargetJs": "libraryroot.custom.js"
},
{
"MatchRegexString": "Supernav$",
"TargetCss": "libraryroot.custom.css",
"TargetJs": "libraryroot.custom.js"
},
{
"MatchRegexString": "^notificationtoasts_",
"TargetCss": "notifications.custom.css",
"TargetJs": "notifications.custom.js"
},
{
"MatchRegexString": "^SteamBrowser_Find$",
"TargetCss": "libraryroot.custom.css",
"TargetJs": "libraryroot.custom.js"
},
{
"MatchRegexString": "^OverlayTab\\d+_Find$",
"TargetCss": "libraryroot.custom.css",
"TargetJs": "libraryroot.custom.js"
},
{
"MatchRegexString": "^Steam Big Picture Mode$",
"TargetCss": "bigpicture.custom.css",
"TargetJs": "bigpicture.custom.js"
},
{
"MatchRegexString": "^QuickAccess_",
"TargetCss": "bigpicture.custom.css",
"TargetJs": "bigpicture.custom.js"
},
{
"MatchRegexString": "^MainMenu_",
"TargetCss": "bigpicture.custom.css",
"TargetJs": "bigpicture.custom.js"
},
{
"MatchRegexString": ".friendsui-container",
"TargetCss": "friends.custom.css",
"TargetJs": "friends.custom.js"
},
{
"MatchRegexString": "Menu$",
"TargetCss": "libraryroot.custom.css",
"TargetJs": "libraryroot.custom.js"
},
{
"MatchRegexString": ".ModalDialogPopup",
"TargetCss": "libraryroot.custom.css",
"TargetJs": "libraryroot.custom.js"
},
{
"MatchRegexString": ".FullModalOverlay",
"TargetCss": "libraryroot.custom.css",
"TargetJs": "libraryroot.custom.js"
}
]
}
```
每个条目都应包含一个 "MatchRegexString" 键,其值可以是用于匹配
Steam 页面标题的正则表达式字符串,也可以是以 `http://` 或 `https://` 开头的用于匹配 URL 的链接。
每个条目还可以包含 TargetCss 键和 TargetJs 键,它们将作为在正则表达式匹配成功时
应用到页面的 CSS 和 JS 文件。
一个条目可以同时包含 TargetCss 和 TargetJs 键,也可以只包含其中之一。
每个目标同一时间只能注入一个 CSS 和一个 JS 文件,并且以首个匹配项为准,因此
请正确排列您的补丁顺序。
如果您想使用 SFP 的默认配置,可以直接省略 skin.json 文件或包含以下内容:
```
{
"UseDefaultPatches": true
}
```
如果该键与自定义补丁同时包含,则会先应用自定义补丁,然后再应用默认补丁。
### 匹配具有可变标题的页面
某些页面的标题会根据用户的语言设置或其他因素发生变化。
为了匹配这些页面,您可以匹配页面内存在的选择器。如果 MatchRegexString 以 `.`、`#` 或 `[` 开头,SFP 将进行选择器匹配。
例如:
- 好友列表和聊天窗口可以通过 `.friendsui-container` 进行匹配
- 库的游戏属性对话框以及覆盖层菜单中弹出的大多数对话框可以通过
`.ModalDialogPopup` 进行匹配
- 登录页面可以通过 `.FullModalOverlay` 进行匹配
### 查找 Steam 页面标题
要查找需要匹配的 Steam 页面标题,请确保 Steam 在带有 `cef-enable-debugging` 参数的情况下运行,然后
在您的 Web 浏览器中访问 。
### 使用系统强调色
当用户启用了 UseAppTheme 设置时,SFP 会通过 CSS 变量将系统强调色传递给 Steam。
您可以在皮肤中使用这些变量来匹配系统强调色。
这些变量如下:
- `--SystemAccentColor`
- `--SystemAccentColorLight1`
- `--SystemAccentColorLight2`
- `--SystemAccentColorLight3`
- `--SystemAccentColorDark1`
- `--SystemAccentColorDark2`
- `--SystemAccentColorDark3`
这些变量包含 **十六进制颜色代码**。
使用这些变量时,请务必提供合理的默认回退值,因为如果用户未启用 UseAppTheme 或使用的是其他补丁工具,这些变量可能不存在。
## 待办事项
- 添加直接从 SFP 安装和自定义皮肤的功能
## 已知问题
- 暂无
## 依赖项
### 所有平台
- [.NET 7.0](https://dotnet.microsoft.com/en-us/download/dotnet/7.0)(仅在未使用独立版本时需要)
### Linux
- ttf-ms-fonts
- 安装后运行 `fc-cache --force`
## 致谢
- 感谢 Steam 社区论坛的 Darth 提供的方法。
- [@henrikx 提供了 Steam 目录检测代码。](https://github.com/henrikx/metroskininstaller)
- [Dot Net Perls 的 Sam Allen 提供了 GZIP 压缩、解压缩和检测代码。](https://www.dotnetperls.com/decompress)
- [@maxhauser 提供了 semver](https://github.com/maxhauser/semver)
- [Avalonia 团队提供了 AvaloniaUI 框架](https://github.com/AvaloniaUI/Avalonia)
- [@amwx 提供了 FluentAvalonia 主题](https://github.com/amwx/FluentAvalonia)
- [@d2phap 提供了 FileWatcherEx](https://github.com/d2phap/FileWatcherEx)
- [@alastairtree 提供了 LazyCache](https://github.com/alastairtree/LazyCache)
标签:CEF调试, Steam客户端, 外观美化, 数据可视化, 皮肤定制, 脚本注入