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, 云资产清单, 反作弊绕过, 客户端钩子, 引擎修改, 数据擦除, 框架移植, 流量审计, 游戏插件, 游戏模组, 游戏逆向, 逆向工程