沙盘引擎 (SEngine)

创意诞生沙盘世界,不止如此想象!

用户工具

站点工具


reference:define

📚 宏文本及功能

《沙盘引擎》内置了一些“宏代码(Define)”,搭配相关API使用,可以将指定宏文本转换为实时获取结果的文本。

常用案例:网络传输后的本地翻译、内置信息获取(如玩家人数、版本等)、绑定按键映射等。

宏文本的表示方式:%define_key%

📒 应用场景

📘 本地翻译案例

例如开发者制作了一个团队射击游戏,通常会在有玩家被击杀后输出杀敌信息到公屏,代码看起来应该像这样:

if(killer.Entity.Group == 1)
{
	Message("CT-Team: " + killer.Entity.Name + " killed " + player.Entity.Name );
}else if(killer.Entity.Group == 2){
    Message("T-Team: " + killer.Entity.Name + " killed " + player.Entity.Name );
}

这样的代码本身没有什么问题,但是如果希望不同地区玩家最终看到的是本地翻译后的结果,这就需要使用宏定义来实现。

首先,开发者应该按照规范自定义好语言文件,然后记住要使用的语言Key(例如:Mod.TeamGroup.CT | T)。

if(killer.Entity.Group == 1)
{
	Message("%Mod.TeamGroup.CT%: " + killer.Entity.Name + " killed " + player.Entity.Name );
}
}else if(killer.Entity.Group == 2){
    Message("%Mod.TeamGroup.T%: " + killer.Entity.Name + " killed " + player.Entity.Name );
}

使用此方式发送的消息(Message | Announce | Subtitle...)会自动将宏文本(%xxx%)进行识别,如果语言Key正确且存在,则会在消息到达玩家本地后,自动识别为玩家本地的语言。

这样即可解决不同地区的玩家最终得到不同的翻译结果。

📘 内置信息案例

例如开发者希望输出一些内置信息,可参考引擎已存在的本地宏文本(可参考下方),按需进行使用。

Message("Your EngineVersion: %EngineVersion%"); //"Your EngineVersion: V0.77"
Message("Current Players: %PlayerCount%"); //"Current Players: 1"

📘 绑定按键案例

有时开发者希望提醒玩家:“按下[?]键使用某功能”,如果开发者直接绑定按键代码,可以直接告知玩家服务器绑定的按键。

但如果开发者使用更为标准的BindNativeKey绑定按键流程(允许玩家自定义按键),这就有可能出现玩家修改了默认按键的情况,此情况下需要获取到实时正确的按键代码,此问题可通过本地按键宏文本来解决。

Message("Press %KEY_World_Use% use!"); //"Press "F" use!

需要注意的是,如何让引擎知道这是一个本地按键宏文本

没错,任何以KEY_开头的宏文本均被优先认为是按键宏文本。

📒 引擎内置宏

特别提醒:由于宏的机制,宏文本应该用于最终本地玩家解析,因此最终获取的结果也是本地玩家解析后的结果。

宏文本 功能说明
%Language% 正在使用的引擎语言名称
%ModLanguage% 正在使用的模组语言名称
%PlayerCount% 当前世界玩家数量
%EngineVersion% 引擎版本信息
%EngineEdition% 游戏授权版本(社区版、标准版)
%Engine% 引擎版权信息
%EveryOne% 翻译:Native.Common.LocalDefine[0]

📒 宏文本API

默认情况下,宏文本可以直接在Message | Announce | Subtitle...等功能自动进行解析,但如果有特殊或手动解析的需求,可以使用相关API过滤一次字符串。

宏文本解析API:FormatDefineText( text: string, includeColor: bool = true );

reference/define.txt · 最后更改: 2024/06/14 03:36 由 bibiboxs