自动将 .CS 转换为 IVSDK.net 游戏内

自动将 .CS 转换为 IVSDK.net 游戏内

嘿,IVSDK.net的用户们,厌倦了看到所有这些你无法使用的酷炫.cs模组吗?现在,你可以在游戏内实时转换,就能使用它们了!还有.vb模组也一样!

IVSDKScriptCompiler 0.3(实验性)

在 IV-SDK .NET 下,像 ScriptHookDotNet 1.7.1.9 那样,从 .cs / .vb 源代码运行 ScriptHookDotNet 脚本。

一些较旧的模组以源代码形式发布,例如 ChopShop.cs。ScriptHookDotNet 1.7.1.9 可以直接运行这些源代码,但 IV-SDK .NET 只加载已编译好的 .net.dll 文件,因此这些模组无法生效。IVSDKScriptCompiler 解决了这个问题。游戏启动时,它会把每个源脚本编译成 .net.dll,然后 IV-SDK .NET 会像加载其他任何 ScriptHookDotNet 模组一样加载它。

已在 IV-SDK .NET 1.9.1 上测试。它不依赖游戏版本。

源代码、完整文档和问题反馈:https://github.com/bassisthip63-ui/IVSDKScriptCompiler


你需要什么

  • 安装了 IV-SDK .NET 1.9.x 并带有 ScriptHookDotNet 支持 的 GTA IV 或 EFLC:必须存在 IVSDKDotNet\bin\ScriptHookDotNet.dll。
  • .NET Framework 4.x。 所有受支持的 Windows 版本都已自带它。

此下载包含的内容

IVSDKScriptCompiler\
  TheReadMe.md                      此文件
  LICENSE
  TheFiles\                         模组本体
    IVSDKDotNet\scripts\IVSDKScriptCompiler.ivsdk.dll
  TheTestScript\                    可选的测试脚本
    scripts\HelloSource.net.cs

安装

  1. 将 TheFiles 中的 IVSDKDotNet 文件夹复制到你的 GTA IV 文件夹(包含 GTAIV.exe 的那个文件夹),并让它与已存在的 IVSDKDotNet 文件夹合并。模组最终会位于此处:
    GTA IV\
      GTAIV.exe
      IVSDKDotNet\
        scripts\
          IVSDKScriptCompiler.ivsdk.dll  <- 此处
    
  2. 启动游戏一次。IV-SDK .NET 控制台(F4)会显示 IVSDKScriptCompiler 0.3: looking for source scripts。

快速测试(可选)

TheTestScript\scripts\HelloSource.net.cs 是一个很小的 测试脚本,仅用于表明模组正在工作。

  1. 将它复制到游戏的主 scripts 文件夹,即 GTAIV.exe 旁边的那个文件夹(不是 IVSDKDotNet\scripts)。
  2. 启动游戏。在你获得控制权几秒后,屏幕上会显示:
    HelloSource.net.cs: compiled from source and running
    
  3. 之后从 scripts 中删除 HelloSource.net.cs。它的编译文件会在下次启动时自动删除。

使用方法

将源脚本放到 ScriptHookDotNet 1.7.1.9 所要求的位置,即游戏的 scripts 文件夹,然后启动游戏:

GTA IV\
  scripts\
    ChopShop.cs                <- 模组的源脚本
    ChopShop.compiled.net.dll  <- 自动生成;IV-SDK .NET 加载此文件
  • 新增或更改的脚本 会在游戏启动时编译,并在同一次启动中加载。
  • 未更改的脚本 不会再次编译,因此后续启动会保持快速。
  • 要移除模组,请删除其 .cs / .vb 文件。它的 .compiled.net.dll 会在下次启动时删除。
  • 编辑了脚本? 请重启游戏。脚本仅在游戏启动时编译。
  • 在 IVSDKDotNet\scripts\ 中,只有命名为 *.net.cs / *.net.vb 的文件会被编译,因为该文件夹也存放 IV-SDK .NET 自身的文件。

需要其他库的脚本可以添加一行,例如 //#reference SomeLibrary.dll(VB:'#reference SomeLibrary.dll)。

如果脚本未加载

请检查 IVSDKDotNet\IVSDKScriptCompiler.log 或 F4 控制台。编译错误会列出文件、行号和消息。存在错误的脚本只会不加载;游戏和你的其他模组会继续运行。

  • 最常见原因: 脚本使用了较新的 C# 语法。Windows 内置的编译器支持 C# 5 / VB 11。旧的 ScriptHookDotNet 脚本没有问题,但像 $"..." 字符串或 ?. 之类的内容将无法编译。
  • 无害: IV-SDK .NET 自身的日志会为每个源脚本显示两行黄色文字,例如 "The file 'ChopShop.cs' is not a IV-SDK .NET or ScriptHookDotNet script file." IV-SDK .NET 也会查看源文件,它自身无法加载该文件,并会跳过它。实际加载的是编译后的副本。

杀毒软件说明

  • 游戏启动时,此模组会运行 Windows 自带的 C# / VB 编译器(来自 .NET Framework 4 的 csc.exe / vbc.exe)。这就是 .NET 内置编译的工作方式,ScriptHookDotNet 1.7.1.9 也是如此。它还会在你的源脚本旁边写入 .compiled.net.dll 文件。
  • 它只在 scripts\、IVSDKDotNet\scripts\ 及其日志中读写。它没有网络访问权限,也不会接触注册表或游戏内存。
  • 发布版 dll 已使用 Microsoft Defender 扫描。如果你的杀毒软件仍然标记它,你可以使用包含的 build.bat 从 GitHub 上的源代码自行构建,并请报告该误报。

卸载

删除 IVSDKDotNet\scripts\IVSDKScriptCompiler.ivsdk.dll、它生成的任何 *.compiled.net.dll 文件,以及 IVSDKDotNet\IVSDKScriptCompiler.log。

致谢与许可

作者 bassisthip63-ui,与 Claude(Anthropic)共同编写。MIT 许可证,请参阅 LICENSE。

IV-SDK .NET 由 ItsClonkAndre 开发。此模组不属于它,也未获得其作者认可。GTA IV 是 Rockstar Games / Take-Two Interactive 的商标;此模组与他们无关。

https://github.com/bassisthip63-ui/IVSDKScriptCompiler