EOP-Labs/M2TWEOP-library
GitHub: EOP-Labs/M2TWEOP-library
一个通过内存修改技术扩展《中世纪2:全面战争》游戏引擎的开源项目,突破原版引擎限制并提供丰富的 Lua 脚本 API 供模组开发者使用。
Stars: 82 | Forks: 10
[](https://github.com/EOP-Labs/M2TWEOP-library/releases)
[](https://github.com/EOP-Labs/M2TWEOP-library/releases)
[](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 脚本入门
[](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+**
标签:API, C++, Dear ImGui, Lua, rizin, SOC Prime, 中世纪2, 全面战争, 内存修改, 即时战略, 开发工具, 引擎大修, 数据擦除, 汇编, 游戏Mod, 游戏修改, 游戏扩展, 漏洞修复, 热重载, 网络安全培训, 脚本, 自动回退, 调试
