UI、计时与资源¶
游戏内消息¶
ClearMessages 会清除当前消息板上的全部消息。
HUD 控制¶
int mode = BML::UI::GetHUDMode();
BML::UI::SetHUDMode(mode);
BML::UI::ShowTitle(true);
BML::UI::ShowFPS(true);
如果 Mod 会修改 HUD 模式,应在加载时保存 GetHUDMode() 的结果,并在卸载时恢复。
Speedrun 计时¶
BML::Speedrun::SetTimerVisible(true);
BML::Speedrun::ResetTimer();
BML::Speedrun::StartTimer();
BML::Speedrun::PauseTimer();
float elapsed = BML::Speedrun::GetElapsedTime();
Speedrun 计时是 Loader 的共享功能。只有确实需要控制计时流程的 Mod 才应调用修改函数。
菜单¶
不要在 OnLoad 中自动打开菜单。
文件路径¶
string root = ctx.GetModRootUtf8();
string path = ctx.ResolveModPathUtf8("data/message.txt");
bool exists = ctx.ModFileExistsUtf8("data/message.txt");
string content = ctx.ReadModTextFileUtf8("data/message.txt", "");
规则: - 路径用正斜杠 - 不要硬编码绝对路径 - 读取前先检查 ModFileExistsUtf8
文件布局¶
脚本库 (#include)¶
库文件不能有 [bml.mod] 属性。放在当前 mod 目录自己的 libs/ 下,不要放到全局
ModLoader/Mods/libs/ 里给多个 mod 共用。热重载按单个 mod 的入口和资源根目录
计算源码范围;全局 include 文件不是稳定的热重载边界。
加载资源对象¶
BML::ObjectLoadOptions options;
options.File = BML::Path::Combine(ctx.GetDirectoryUtf8(BML::DIR_GAME), "3D Entities\\PH\\P_Ball_Wood.nmo");
options.Rename = true;
options.MasterName = "UniqueObjectName";
options.AddToScene = true;
options.Dynamic = true;
BML::ObjectLoadResult@ result = BML::CK::LoadObject(options);
if (result !is null && result.Success && result.Count > 0) {
CKObject@ obj = result.BorrowObject(0);
}
返回值必须检查 result !is null && result.Success。