EOP-Labs/M2TWEOP-library

GitHub: EOP-Labs/M2TWEOP-library

一个通过内存修改技术扩展《中世纪2:全面战争》游戏引擎的开源项目,突破原版引擎限制并提供丰富的 Lua 脚本 API 供模组开发者使用。

Stars: 82 | Forks: 10

EOP

[![构建状态](https://img.shields.io/github/v/release/EOP-Labs/M2TWEOP-library?style=for-the-badge&color=3d1d00)](https://github.com/EOP-Labs/M2TWEOP-library/releases) [![构建状态](https://img.shields.io/github/downloads/EOP-Labs/M2TWEOP-library/total?style=for-the-badge&color=a87300)](https://github.com/EOP-Labs/M2TWEOP-library/releases) [![构建状态](https://img.shields.io/discord/713369537948549191?style=for-the-badge&label=Discord&color=b33102)](https://discord.gg/Epqjm8u2WK)
## 什么是 M2TWEOP? M2TW Engine Overhaul Project (M2TWEOP) 旨在扩展策略游戏《中世纪 2:全面战争》(*Medieval 2: Total War*) 的功能。EOP 使用 C++ 和汇编语言在内存中修改游戏代码,并通过 Lua API 将这些功能暴露给最终用户。
## 功能 * [包含 1000 多个函数的 Lua 脚本系统](https://EOP-Labs.github.io/M2TWEOP-library/_static/LuaLib/index.html) * 提供代码示例和 VSCode Intellisense 的完整文档 * 与现有 campaign_script 脚本的无缝集成 * 热重载 (Hot-reload) * 自定义控制台 * 调试支持 (VSCode) * [ImgGui 绑定](https://github.com/ocornut/imgui) * 移除了以下引擎限制: * 兵种类型和部队规模的数量 * 宗教和文化的数量 * 建筑及其建筑链的数量 * 随从的数量 * 自定义定居点的数量 * 自定义 cas 模型(角色和定居点)的数量 * 解锁所有原版控制台命令 * 修复了许多引擎错误、崩溃和疏漏,例如: * 狂战士单位瞬间崩溃 * 象兵单位破坏攻城战 * 象炮无法攻击城门 * 可以在战役地图上的任何位置以任意比例绘制 cas 模型 * 完全可自定义和配置的启动器 * 支持 30 多个模组的 Discord Rich Presence * 罗马全面战风格的[战术地图查看器](https://www.youtube.com/watch?v=RrGi4zxr7bU) * 在线进行热座 (Hotseat) 战斗并将结果传回战役地图 * 自定义按键绑定支持 * 播放自定义声音或音乐,支持 WAV、OGG/Vorbis 和 FLAC 格式 * 同时支持光盘 (1.5) 和 Steam (1.52) 版本 ## Lua 示例 ### 移除引擎限制 ``` function onPluginLoad() M2TWEOP.unlockGameConsoleCommands(); M2TWEOP.setAncillariesLimit(16); M2TWEOP.setMaxBgSize(100); M2TWEOP.setReligionsLimit(50); M2TWEOP.setBuildingChainLimit(40); M2TWEOP.setGuildCooldown(3); end ``` ### 播放声音、显示 GUI 和生成单位 ``` -- onGeneralAssaultsGeneral is a custom EOP event function onGeneralAssaultsGeneral(eventData) local attacker, defender = eventData.attacker, eventData.defender -- Check if the character is a Nazgul if (hasTrait(attacker, "NazgulRace")) then -- Play a sound playSound(nazgulScream) -- Display some text showWindow("The Nazgul have arrived.") -- Spawn a new unit spawnUnit("Gondor Infantry", "Anorien", "Minas Tirith", 3, 4, 1, 1) end end ``` 有关 EOP 事件的完整列表,请参见[此处](https://EOP-Labs.github.io/M2TWEOP-library/_static/LuaLib/index.html) ## M2TWEOP Lua 脚本入门 [![M2TWEOP-教程](https://i.imgur.com/ByebdSI.png)](https://youtu.be/hUvbcz8i7Wk) ## 本地构建 ### M2TWEOP 库和 GUI **要求** * [带有 C++ 开发工具包的 Microsoft Visual Studio 2022](https://aka.ms/vs/17/release/vs_community.exe) * [DirectX SDK 2009](https://community.chocolatey.org/packages/directx-sdk) 使用 [Choco](https://chocolatey.org/install) 可以轻松安装 DirectX SDK。 **如何构建** 1. 克隆项目 2. 以管理员模式运行适用于 Visual Studio 2022 的 Developer Powershell 3. 导航到您克隆/解压项目的目录 4. 运行构建脚本,例如 ``` # 默认的完整 release 构建脚本 .\buildEOP.ps1 -modFolder "E:\Steam\steamapps\common\Medieval II Total War\mods\Tsardoms-2.2" # 不带 config 或 luaPluginScript.lua 的 Release 构建脚本 .\buildEOPDev_release.ps1 -modFolder "E:\Steam\steamapps\common\Medieval II Total War\mods\Tsardoms-2.2" # 不带 config 或 luaPluginScript.lua 的 Debug 构建脚本 .\buildEOPDev_debug.ps1 -modFolder "E:\Steam\steamapps\common\Medieval II Total War\mods\Tsardoms-2.2" ``` 您可以在我们的 [Discord](https://discord.gg/Epqjm8u2WK) 服务器上获取有关构建/开发的支持。 ### 文档 如果您想提交 PR 来修复文档/Intellisense 问题,请参考以下文件 * `LuaDocs.lua` 是根据 [config.ld](https://github.com/EOP-Labs/M2TWEOP-library/blob/master/documentationGenerator/config.ld#L3) 中定义的文件生成的 * `LuaImGuiDocs.lua` 是根据 [sol_ImGui.cpp](https://github.com/EOP-Labs/M2TWEOP-library/blob/master/M2TWEOP%20Code/M2TWEOP%20library/imgui/sol_ImGui.cpp) 生成的 有关更多详细信息,请参阅 documentationGenerator 文件夹中的 [README](https://github.com/EOP-Labs/M2TWEOP-library/tree/master/documentationGenerator) ## 免责声明 * 未经事先许可,请勿将本项目包含在模组中(这仅仅是为了跟踪使用情况) * 请勿使用未发布的 M2TWEOP 版本发布您的模组 ## 版本历史 * **v.2+** * **v.2.0:** 大量修复和优化。lua 插件中增加了许多新功能,并导出了功能以供其他插件使用。 * **v.2.0 test2:** 更改了初始化方式 添加了在启动时隐藏启动器的选项 添加了一个窗口,该窗口会在游戏初始化可能出现某些问题时出现。启动器在启动游戏时不会冻结。 * **v.2.0 test1:** 添加了 lua 插件以及大量的函数。 修复了许多崩溃和问题。 优化。 * **v.1.18:** 完善外交系统,增加了通过脚本检查附庸关系的能力 能够使堡垒的一部分成为永久的,另一部分成为临时的 更改继承人的能力 自动创建历史战役的能力 根据在线战斗结果自动编辑战略地图上军队的能力 修复了游戏光盘版中角色年龄显示不正确的问题 现在您可以使用 .bat 文件运行程序和游戏(并非所有新的启动方法都能正常工作) * **v.1.17:** 修复了如果角色在游戏中没有名字时的崩溃问题 添加了部分禁用日志的功能 添加了在单人游戏中使用控制台命令 "change faction" 的能力 改进了脚本系统 添加了使派系成为其他派系附庸的能力 添加了在战略上查看战斗地图的能力(战斗中按 Z 键) * **v.1.16:** 添加了从程序启动游戏的功能 添加了替换单位 legio 前缀的功能 改进了脚本系统 添加了更改角色标签的功能 * **v.1.15:** 修复了几个错误 添加了升级角色卫队的能力 * **v.1.14:** 添加了设置攻城器械(攻城槌、攻城梯、攻城塔)成本的功能。 * **v.1.13:** 修复了在游戏中使用狂战士时的崩溃问题。 添加了快速修改附加文件的功能。 * **v.1.12:** 改进了对 descr_buildings 的编辑(扩大了可能值的范围) 添加了使角色不朽以及更改年龄显示设置的功能。 * **v.1.11:** 添加了多个在程序启动时应用于游戏的补丁,以及在配置文件中配置它们的功能。 * **v.1.10:** 修复了未总能正确读取游戏参数的问题。 * **v.1.09:** 改进了 descr_battle.txt 的生成。增加了战斗季节(冬季或夏季)和战斗时间的输出,以及将军的肖像、模型和特殊能力。 * **v.1.08:** 改进了 descr_battle.txt 的生成。现在会显示军队的部署坐标。 * **v.1.07:** 改进了 descr_battle.txt 的生成。 * **v.1.06:** 现在,在生成 descr_battle.txt 时,会写入派系列表、战斗年份以及一些更多的标准信息。 * **v.1.05:** 添加了在生成 descr_battle.txt 时显示每个交战军队坐标的功能 * **v1.04:** 更改了自动计算损失的系统,将军的部队被同时移除,但将军本人可以在一定回合内被视为存活。 这样做是为了避免崩溃。 建议在手动杀死将军时,始终勾选“标记此堆栈中是否只有一名将军”选项 (mark if there is only one general in the stack)。否则,在战役过程中可能会出现退出崩溃的情况。 * **v1.03:** 现在该程序仅适用于 MTW2 的 Steam 版本。 “暂时” ;) 剪裁掉了俄语。 * **v1.02:** 修复了在损失自动转移期间的崩溃问题。 修复了损失的自动计算,它们可能没有被计算到所有单位上。 * **v1.01:** 在生成 descr_battle.txt 时添加了将军特质(包括隐藏特质)。 添加了在线战斗后自动转移损失的功能。 提高了程序的稳定性。 * **v1.0:** 首次发布。 ### 许可证 本项目使用 [GPL-3.0 许可证](https://www.gnu.org/licenses/gpl-3.0.html)。
标签:API, C++, Dear ImGui, Lua, rizin, SOC Prime, 中世纪2, 全面战争, 内存修改, 即时战略, 开发工具, 引擎大修, 数据擦除, 汇编, 游戏Mod, 游戏修改, 游戏扩展, 漏洞修复, 热重载, 网络安全培训, 脚本, 自动回退, 调试