Skip to content

Latest commit

 

History

History
209 lines (108 loc) · 10.2 KB

READMECN.md

File metadata and controls

209 lines (108 loc) · 10.2 KB

MetaHookSv

MetaHook的Sven Co-op移植版本

用黑科技提升你的Sven Co-op游戏体验

大部分插件都兼容原版GoldSrc引擎,具体的兼容性情况请逐个查阅插件文档。

英文README

下载

GitHub Release

因为某些神秘原因导致无法下载的话可以使用加速镜像,往里复制下载地址即可下载

VAC风险?

虽然在游戏中使用hook之类的行为可能看上去很危险,但是目前为止还没有人反馈因为使用此插件导致VAC封禁。

并且Sven Co-op并不属于受VAC保护的游戏

你甚至可以以添加命令行参数-insecure的方式加所谓“受VAC保护的服务器”,因为Sven Co-op上的VAC根本就没有工作。

如果你实在不放心,那么请使用小号进行游戏,毕竟Sven Co-op是免费游戏。

一键安装方式

  1. GitHub Release 下载压缩包。(可利用GitHub的国内加速镜像加速下载),然后解压。

  2. 运行 install-to-SvenCoop.bat

  3. \SteamLibrary\steamapps\common\Sven Co-op\svencoop.exe 启动游戏

  • 其他游戏也可以按照此种方式安装,只需要运行其他install-to-批处理即可。

  • 请确保已经登录Steam否则 SteamAppsLocation 可能会无法寻找游戏安装目录,导致自动安装失败。

手动安装方式

  1. GitHub Release 下载压缩包。(可利用GitHub的国内加速镜像加速下载),然后解压。

  2. 复制Build目录下的所有你认为你需要安装的文件\SteamLibrary\steamapps\common\Sven Co-op\ 下。

  3. 打开 \SteamLibrary\steamapps\common\Sven Co-op\svencoop\metahook\configs\ 目录, 将 plugin_svencoop.lst (或 plugin_goldsrc.lst,取决于你当前使用的游戏引擎是SvEngine还是GoldSrc) 重命名为 plugins.lst

  4. \SteamLibrary\steamapps\common\Sven Co-op\svencoop.exe 启动游戏。

  • 如果要运行Sven Co-op以外的游戏,请自行使用-game启动项参数的方式启动,如:svencoop.exe -game valvesvencoop.exe -game cstrike。或者将 svencoop.exe 重命名为对应游戏的mod目录名,如cstrike.exe

  • Build目录中的 svencoop.exe 原来叫 metahook.exe,它会替换你自带的游戏启动器svencoop.exe,请注意备份。当然你也可以选择不替换svencoop.exe,而是手动安装并以命令行或启动项metahook.exe -game svencoop的方式启动游戏。不过不推荐这么做,因为这么做会导致更改视频模式的时候游戏闪退(可能是游戏自己对进程名有校验)。

  • Build目录中的SDL2.dll文件是用来修复原版SDL使用中文输入法进行游戏时可能发生的内存越界写入导致游戏崩溃的问题。如果你全程都关闭中文输入法的话也可以选择不替换SDL2.dll

构建需求

  1. Visual Studio 2017 或 2019,以及VC141 或 VC142工具集。

  2. CMake

  3. git 客户端

如何构建

假设你已经正确安装了所有构建需求。

  1. 执行 git clone https://github.com/hzqst/MetaHookSv 拉取代码到一处路径不包含空格的目录中。

  2. 运行 build-initdeps.bat, 等待所有子模块和依赖项目下载完成。 (这一步可能需要花费几分钟时间, 具体取决于你的网速,如果速度很慢或者下载出错建议尝试使用魔法上网)

  3. 运行 build-MetaHook.bat, 等待 svencoop.exe 生成到 Build 目录。

  4. 运行 build-(指定插件名).bat, 等待 (指定插件名).dll 生成。目前可用的插件有:CaptionMod, Renderer, StudioEvents, SteamScreenshots, SCModelDownloader, CommunicationDemo, DontFlushSoundCache。

  5. 如果构建成功,插件应该会生成到Build\svencoop\metahook\plugins\目录。

  • 如果你的网络经常无法访问github导致clone失败,你可以从国内镜像gitee分别拉取MetaHookSvDetoursCapstoneBullet3 Physics SDK

  • 上述国内镜像可能不是最新,如果需要最新版本可以自行创建gitee仓库并设置源镜像为对应的github仓库,然后从github同步到gitee,或使用魔法上网拉取代码。

如何调试

  1. 执行 git clone https://github.com/hzqst/MetaHookSv 拉取代码到一处路径不包含空格的目录中。

  2. 运行 build-initdeps.bat, 等待所有子模块和依赖项目下载完成。 (如果你之前已经执行过这一步的指令,则可以略过这一步) (这一步可能需要花费几分钟时间, 具体取决于你的网速,如果速度很慢或者下载出错建议尝试使用魔法上网)

  3. 运行 debug-SvenCoop.bat (其他游戏就选择该游戏对应的debug批处理)

  4. 打开 MetaHook.sln, 在解决方案资源管理器中找到对应的项目,右键设置为启动项目,然后以Debug Win32生成配置重新生成该项目后,按F5即可启动本地调试。

  • 如果运行 debug-SvenCoop.bat 时 Visual Studio 正在运行,请重启一次 Visual Studio,否则可能会导致新的调试设置不生效。

  • 请确保已经登录Steam否则 SteamAppsLocation 可能会无法寻找游戏安装目录。

MetaHookSv (V3) 相比 MetaHook (V2) 的新功能

  1. 提供反汇编 API 用于分析引擎代码,提供反向(往前)搜索函数头部的API。提供更多好用的API。

  2. 防止插件重复加载(重复加载会导致插件自调用,引发无限递归)

  3. LoadEngineLoadClient 阶段会对所有InlineHook请求开启“事务”,直到所有插件的LoadEngineLoadClient结束才会让InlineHook生效, 这样就可以允许不同插件SearchPatternInlineHook 同一个函数,也不会引发冲突了

加载顺序

  1. MetaHook启动器总是会以从上到下的顺序加载 \(GameDirectory)\metahook\configs\plugins.lst 中列出的插件。当插件名前面存在引号";"时该行会被忽略。

  2. 当支持AVX2指令集时自动加载(插件名)_AVX2.dll

  3. 当支持AVX指令集时且(2)失败时自动加载(PluginName)_AVX.dll

  4. 当支持SSE2指令集时且(3)失败时自动加载(PluginName)_SSE2.dll

  5. 当支持SSE指令集时且(4)失败时自动加载(PluginName)_SSE.dll

  6. 当(2) (3) (4) (5)均失败时自动加载(PluginName).dll

插件列表

CaptionMod

这是一个使用VGUI2来显示字幕、翻译英文HUD消息和VGUI文本的插件。

对Sven Co-op而言,该插件修复了游戏中大多数无法显示中文的乱码问题。

中文文档 英文文档

BulletPhysics

对游戏提供布娃娃支持。玩家死亡时以及玩家被藤壶、喷火怪抓住时将玩家模型转化为布娃娃。

中文文档 DOCUMENTATION

MetaRenderer

替换了原版的图形渲染引擎,极大提升了渲染性能,使用了黑科技提升你的画质和帧率。

中文文档 英文文档

StudioEvents

该插件可以防止重复播放模型自带音效,防止音效反复刷屏。

DOCUMENTATION 中文文档

SteamScreenshots (只支持Sven Co-op)

该插件捕获了snapshots截图命令,将其重定向到Steam客户端自带的截图功能上。

SCModelDownloader (只支持Sven Co-op)

该插件自动从 https://wootguy.github.io/scmodels/ 下载缺失的玩家模型。

控制台参数 : scmodel_autodownload 0 / 1 设为1时启用自动下载

控制台参数 : scmodel_downloadlatest 0 / 1 设为1时自动下载最新版本的模型(如果有多个版本的模型)

控制台参数 : scmodel_usemirror 0 / 1 / 2 使用CDN镜像加速下载,1 = cdn.jsdelivr.net, 2 = https://gh.api.99988866.xyz

CommunicationDemo (只支持Sven Co-op)

该插件开放了一个接口用于进行客户端-服务端双向通信。

DontFlushSoundCache (只支持Sven Co-op) (实验性)

该插件阻止客户端在 retry 时清理 soundcache 缓存 (引擎在HTTP完成下载时会触发 retry 命令), 让客户端得以保留HTTP下载得到的 soundcache txt

服务端必须上传自己的soundcache到资源服务器来支持soundcache的HTTP下载

该插件的目的是节约服务器的带宽资源和磁盘IO资源(频繁读写文件不是什么好事,用UDP挂服下载更不是什么好事)

ABCEnchance (第三方) (只支持Sven Co-op)

该插件提供以下功能:

  1. CSGO 风格的血量和弹药 HUD
  2. 2077风格的转盘武器选择菜单
  3. 伤害来源指示器
  4. 动态准星
  5. 实时更新的小地图(略微消耗渲染性能)
  6. 漂浮文字显示队友的血量、护甲、名字.
  7. 其他一些没什么用的特效

https://github.com/DrAbcrealone/ABCEnchance

HUDColor (第三方) (只支持Sven Co-op)

该插件可以修改游戏中HUD的颜色。

https://github.com/DrAbcrealone/HUDColor

MetaAudio (第三方) (只支持GoldSrc)

该插件使用alure2+OpenAL替换了GoldSrc原本的声音系统

由于SvEngine已经使用FMOD作为声音引擎了,你不应该在Sven Co-op上使用该插件

https://github.com/LAGonauta/MetaAudio

  • 由于 MetaAudio 会拦截引擎中所有播放声音的接口。MetaAudio.dllplugins.lst 中必须处于任何依赖于引擎中声音组件的插件之前 (例如:CaptionMod) ,你需要调整加载顺序以防止这些插件的功能被 MetaAudio 干扰。使用错误的加载顺序可能会导致这些插件无法正常工作。

  • 具体解释:如果两个插件都对同一个函数(比如引擎中播放声音的api)挂了hook,那么后安装的hook会先于先安装的hook执行,而我们必须确保hook的调用链为hw.dll->CaptionMod.dll->MetaAudio.dll才能让CaptionMod根据声音播放字幕的功能不被MetaAudio拦截,也就是说CaptionMod.dll必须在MetaAudio.dll之后安装hook。