hzqst/MetaHookSv
GitHub: hzqst/MetaHookSv
面向 Sven Co-op 和 GoldSrc 游戏的客户端模组框架,通过插件系统提供图形增强、UI 定制、物理模拟等体验改进。
Stars: 217 | Forks: 43
# MetaHookSv
这是 [MetaHook](https://github.com/nagist/metahook) 针对 SvEngine(Sven Co-op 团队修改的 GoldSrc 引擎)的移植版本,作为一个客户端模组框架,
主要目的是为了让你在 Sven Co-op 或其他基于 GoldSrc 的游戏中保持良好的游戏体验。
大多数插件仍然兼容原版 GoldSrc 引擎。请查看每个插件的文档以确认插件兼容性。
[中文自述文件](READMECN.md)
### 兼容性 (仅限 MetaHook 加载器)
| 引擎 | |
| ---- | ---- |
| GoldSrc_blob (3248~4554) | √ |
| GoldSrc_legacy (< 6153) | √ |
| GoldSrc_new (8684 ~) | √ |
| SvEngine (8832 ~) | √ |
| GoldSrc_HL25 (>= 9884) | √ |
## 下载
[GitHub Release](https://github.com/hzqst/MetaHookSv/releases)
* `MetaHookSv-windows-x86.zip` 适用于大多数用户。
* `MetaHookSv-windows-x86-blob-support.zip` 适用于 buildnum < 4554 的旧版 GoldSrc 引擎。
## VAC 风险?
目前尚未有 VAC 封禁的报告。
Sven Co-op 的二进制文件或可执行文件未经过数字签名,因此 VAC 不会对其进行完整性检查。
## 常见问题解答 (FAQ)
1. 为什么在玩旧版/盗版 GoldSrc 游戏时,游戏进程偶尔会卡住/冻结几秒钟?
A: 这是因为 Valve 使用带有不存在主机名的 `gethostbyname` 来查询主服务器。如果主机名不可用,已知这会阻塞整个游戏循环几秒钟。
你可以在启动参数中添加 `-nomaster` 以阻止引擎查询无效的主机名,或者添加 `-steam` 启动参数以强制引擎使用有效的主服务器源(这在盗版游戏中可能不起作用)。
2. 为什么游戏进程在退出/重启时会卡住几十秒?
A: 这是因为 ThreadGuard.dll 在实际退出游戏之前,正在等待 Valve 的网络线程或类似事物退出。有关更多详细信息,请参阅 [ThreadGuard](https://github.com/hzqst/MetaHookSv#threadguard)。
3. 为什么我在主菜单中遇到黑屏?
A. [SDL3-over-SDL2 兼容层](https://github.com/libsdl-org/sdl2-compat) 在软件渲染模式下工作不正常。请在启动参数中添加 `-gl` 切换到 OpenGL 模式。
4. 如果游戏因内存不足而崩溃怎么办?
尝试启动参数:`-metahook_early_unload_mirrored_dll`(这可节省约 120MB 系统内存)
尝试控制台变量:`r_studio_lazy_load 1`, `r_leaf_lazy_load 1`
## 一键安装 (GUI 安装程序)
1. 从 [GitHub Release](https://github.com/hzqst/MetaHookSv/releases) 下载,然后解压。
2. 运行 `Build-Output\MetahookInstaller.exe`,点击 `install`(或者在安装前选择所需的遊戲)
3. 从生成的快捷方式 `MetaHook for SvenCoop.lnk` 或 Steam 游戏库启动游戏。
* 对于 Sven Co-op 以外的游戏,请运行 `MetaHook for [GameName].lnk`。
* 其他游戏遵循相同的说明,别忘了在安装前选择所需的遊戲。
## 一键安装 批处理脚本)
1. 从 [GitHub Release](https://github.com/hzqst/MetaHookSv/releases) 下载,然后解压。
2. 运行 `scripts\install-to-SvenCoop.bat`(或者 `scripts\install-to-(WhateverGameYouWant).bat`,取决于你想玩哪个)
3. 从生成的快捷方式 `MetaHook for SvenCoop.lnk` 启动游戏
* 对于 Sven Co-op 以外的游戏,请运行 `MetaHook for [GameName].lnk`。
* 其他游戏遵循相同的说明。
* 你应该保持 Steam 运行并在你的游戏库中拥有该游戏,否则 [SteamAppsLocation](toolsrc/README.md) 可能无法找到游戏安装目录。
## 手动安装
1. 从 [GitHub Release](https://github.com/hzqst/MetaHookSv/releases) 下载,然后解压。
2. 所有必需的可执行文件和资源文件都在 `Build` 文件夹中,将 [你想复制的任何内容](Build/README.md) 复制到 `\SteamLibrary\steamapps\common\Sven Co-op\`。
3. 进入 `\SteamLibrary\steamapps\common\Sven Co-op\svencoop\metahook\configs\`,将 `plugin_svencoop.lst`(或 `plugin_goldsrc.lst`)重命名为 `plugin.lst`(取决于你要运行的引擎)
4. 将 `MetaHook.exe` 重命名为 `(ModDirectory).exe`,例如 Sven Co-op 使用 `svencoop.exe`,或者 Counter-Strike 使用 `cstrike.exe`。
* 如果你使用的是 buildnum < 4554 的旧版 GoldSrc 引擎,请使用 `MetaHook_blob.exe` 代替 `MetaHook.exe`。
* 插件可以在 `\SteamLibrary\steamapps\common\Sven Co-op\svencoop\metahook\configs\plugins.lst` 中禁用或启用。
* `Build/SDL3.dll` 用于完整的 IME 候选支持,因为 SDL2 根本不向引擎发送 IME 候选事件。
* `Build/SDL3.dll` 由 [SDL3-over-SDL2 兼容层](https://github.com/libsdl-org/sdl2-compat) 加载,这意味着你必须用 `Build/SDL2.dll` 覆盖 SDL2.dll 才能让 SDL3 正常工作。
## 构建要求
1. [Visual Studio 2022, with vc143 toolset](https://visualstudio.microsoft.com/)
2. [CMake](https://cmake.org/download/)
3. [Git for Windows](https://gitforwindows.org/)
## 构建说明
假设你已经正确安装了所有要求。
1. `git clone --recursive https://github.com/hzqst/MetaHookSv` 到目录路径不包含空格的地方。
2. 运行 `scripts\build-MetaHook.bat`,等待 metahook exe 生成。如果没有发生错误,生成的 exe 应该在 `Build` 下。
3. 运行 `scripts\build-Plugins.bat`,等待所有插件生成。如果没有发生错误,所有生成的 dll 应该在 `Build\svencoop\metahook\plugins\` 下。
## 调试
1. `git clone --recursive https://github.com/hzqst/MetaHookSv` 到目录路径不包含空格的地方。
2. 运行 `scripts\debug-SvenCoop.bat`(或者 `scripts\debug-(WhateverGameYouWant).bat`,取决于你要调试哪个游戏)
3. 使用 Visual Studio IDE 打开 `MetaHook.sln`,将指定项目设置为启动项目,编译项目,然后按 F5 开始调试。
* 其他游戏遵循相同的说明。
* 如果 Visual Studio IDE 正在运行,你应该重启 Visual Studio IDE 以应用调试配置文件的更改。
## MetaHook 文档
[文档](docs/MetaHook.md) [中文文档](docs/MetaHookCN.md)
## 插件
### VGUI2Extension
VGUI2Extension 作为一个 VGUI2 模组框架,为其他插件提供了在 VGUI2 组件上安装钩子/补丁的能力。
[文档](docs/VGUI2Extension.md) [中文文档](docs/VGUI2ExtensionCN.md)
### CaptionMod
一个为游戏添加闭路字幕、HUD 文本翻译、HiDpi 支持和 Source2007 风格聊天对话框的插件。
[文档](docs/CaptionMod.md) [中文文档](docs/CaptionModCN.md)
### BulletPhysics
一个在玩家死亡或被藤壶抓住时将玩家模型转换为布娃娃的插件。
[文档](docs/BulletPhysics.md) [中文文档](docs/BulletPhysicsCN.md)
### MetaRenderer
一个修改原始渲染引擎的图形增强插件。
你甚至可以使用 200k epolys 的模型进行游戏,并保持高帧率。
[文档](docs/Renderer.md) [中文文档](docs/RendererCN.md)
### StudioEvents
此插件可以通过可控的 cvar 阻止 studio-event 声音刷屏。
[文档](docs/StudioEvents.md) [中文文档](docs/StudioEventsCN.md)
### SteamScreenshots (Sven Co-op / GoldSrc 25周年更新后)
此插件拦截 `snapshot` 命令,并用 `ISteamScreenshots` 接口替换它,该接口会将快照上传到 Steam 截图管理器。
### SCModelDownloader (仅限 Sven Co-op)
此插件自动从 https://wootguy.github.io/scmodels/ 下载缺失的玩家模型,并在 mdl 文件准备好后重新加载它们。
Cvar : `scmodel_autodownload 0 / 1` 自动从 scmodel 数据库下载缺失的模型。
Cvar : `scmodel_downloadlatest 0 / 1` 如果有多个不同版本的模型,下载最新版本。
### PrecacheManager
此插件提供一个控制台命令 `fs_dump_precaches`,用于将预缓存资源列表转储到 `[ModDirectory]\maps\[mapname].dump.res`。
* Sven Co-op 的 SoundSystem 使用 `soundcache.txt` 而不是引擎的预缓存系统来预缓存声音文件。
### ThreadGuard
此插件拦截 Valve 的 Win32Thread 创建,并在卸载后备模块之前等待所有线程退出,以防 Valve 的线程代码在后备模块卸载时仍在运行。
可能创建新线程并在不等待线程终止的情况下退出的托管模块:
`hw.dll`, `GameUI.dll`, `ServerBrowser.dll`
### ResourceReplacer
此插件在运行时使用可自定义的替换列表文件替换游戏内资源(主要是模型和声音文件),而无需实际操作文件,就像 Sven Co-op 使用 [gmr](https://wiki.svencoop.com/Mapping/Model_Replacement_Guide) 和 [gsr](https://wiki.svencoop.com/Mapping/Sound_Replacement_Guide) 文件那样。
[文档](docs/ResourceReplacer.md) [中文文档](docs/ResourceReplacerCN.md)
### SCCameraFix (仅限 Sven Co-op)
此插件修复了 Sven Co-op 中观察者视角的相机故障。
更新的观察者视角代码归功于 [halflife-updated](https://github.com/SamVanheer/halflife-updated)
### Better Spray (Sven Co-op / GoldSrc 25周年更新后)
BetterSpray 是一个 MetaHookSV 插件,通过支持高分辨率图像、动态重新加载和云共享来增强 Sven Co-op 和 GoldSrc 的喷漆系统。
https://github.com/hzqst/BetterSpray
### ABCEnchance (第三方) (仅限 Sven Co-op)
ABCEnchance 是一个 MetaHook 插件,为 Sven Co-op 提供体验改进。
1. CSGO 风格的生命值和弹药 HUD
2. 环形武器菜单
3. 动态伤害指示器
4. 动态准星
5. 实时渲染的小地图
6. 使用浮动文本显示队友生命值、护甲和名称。
7. 一些无用的血液特效
https://github.com/DrAbcrealone/ABCEnchance
### HUDColor (第三方) (仅限 Sven Co-op)
在游戏中更改 HUD 颜色。
也是你构建自己插件的一个好模板。
https://github.com/hzqst/HUDColor
### MetaAudio (第三方) (仅限 GoldSrc)
这是一个 GoldSrc 插件,为其声音系统添加 OpenAL 支持。这个分支修复了一些错误,并使用 Alure 代替 OpenAL 直接进行更轻松的源管理。
由于 SvEngine 使用 FMOD 作为其声音系统,你真的不应该在 Sven Co-op 中使用此插件。
https://github.com/LAGonauta/MetaAudio
* MetaAudio 会阻塞 goldsrc 引擎的声音系统并替换为自己的声音引擎。你应该始终将 `MetaAudio.dll` 放在 `plugins.lst` 中任何依赖 goldsrc 引擎声音系统的插件(即 CaptionMod)之上,以防止这些插件被 MetaAudio 阻塞。
### Trinity-EngineSv (第三方) (仅限 GoldSrc)
这是针对 Counter Strike 1.6 的 Trinity Engine 移植。
模组的客户端部分作为 metahook 插件引入。
模组的服务器端部分通过修改过的 reGame dll 完成。
https://github.com/ollerjoaco/Trinity-EngineSv
### Better Spray (第三方)
BetterSpray 是一个 MetaHookSV 插件,通过支持多图像、真实纵横比和动态重新加载来增强 Sven Co-op 的喷漆系统。
https://github.com/KazamiiSC/BetterSpray-Sven-Coop
标签:Bash脚本, C++, DLL注入, GoldSrc, Half-Life, Linux, MetaHook, Sven-Coop, SvEngine, UML, 云资产清单, 反作弊绕过, 客户端钩子, 引擎修改, 数据擦除, 框架移植, 流量审计, 游戏插件, 游戏模组, 游戏逆向, 逆向工程