2.3. 创建武将#
创建新武将的话,首先也是要先想好武将的名字。
但是这件事情就简单多了,一般来说都是用TA的姓名的汉语拼音直接作为名字的。
例如曹操就是caocao,司马懿就是simayi,
当然,英文人物也可以用英文名,如某位凯撒大哥就是caesar。
看起来武将的名字比扩展包的名字好写,但其实不然。
要知道,在新月杀诞生的时候,别说界限突破了,谋攻篇都出来了,到了现在(2024年),同名武将多到可以凑个军五甚至军八……
所以对于这些同名武将,新月杀提供了一种方法来自动识别——
当你注册一个名字格式为XXXX__YYYY(这里是双下划线,如mou__caocao)的新武将时,系统会自动将这个名字沿中间切成两半:其中右边的YYYY是“武将真名”trueName,而左边的XXXX则是这个武将的特有标示,也就是“武将包名”,或称前缀。
如果两个武将拥有同样的“武将真名”,那么这两个武将就是同名武将,
例如ex__caocao和mou__caocao的“武将真名”都是caocao,那么这两个武将就是同名武将。
按照传统,我们也该写个学习包专属的孙悟空的,但是……十周年和欢乐杀已经有孙悟空了(悲),所以在命名上我们也该规矩一点……
意味着学习包的孙悟空名字最好改成st__sunwukong了,
这里前缀取的是"st",study嘛。在你自己的拓展包中,根据情况选定合适的前缀吧。
具体代码就是local sunwukong = General:new(extension, "st__sunwukong", "god", 5),
之后你的xuexi/init.lua看起来就像这样:
重要
要注意把 return extension 留在文档末尾,以下我们的操作都要在这一行 return extension 之前完成!
1local extension = Package:new("xuexi")
2extension.extensionName = "study"
3extension:loadSkillSkelsByPath("./packages/study/pkg/xuexi/skills")
4Fk:loadTranslationTable{
5 ["xuexi"] = "学习",
6}
7
8local sunwukong = General:new(extension, "st__sunwukong", "god", 5)
9
10return extension
创建武将本质上是创建一个“武将对象”,为此,让我们看向武将对象的构造函数:
--- 构造函数,不可随意调用。
---@param package Package @ 武将所属包
---@param name string @ 武将名字
---@param kingdom string @ 武将所属势力
---@param hp integer @ 武将初始体力
---@param maxHp integer @ 武将初始最大体力
---@param gender Gender @ 武将性别
function General:initialize(package, name, kingdom, hp, maxHp, gender)
各参数的作用见上方,这里详细解释一下:
package是该武将所属的扩展包,鉴于第一行已经定义了一个extension,我们就用它了。
name是这个武将的名字,就用刚才起的名字"st__sunwukong"吧"孙悟空"是中文翻译的显示名称,而"st__sunwukong"是武将的代码名称,在所有扩展包中武将的代码名称必须是唯一的。
kingdom是这个武将所属的势力,按照传统,我们填个"god",也就是神势力。
hp和maxHp分别代表体力值和体力上限,maxHp默认与hp一致,而hp默认为4。
gender就是武将性别,默认为General.Male(男性)。
以上代码就往学习包里塞了一位名为“st__sunwukong”的5血5上限神势力男性武将~
至此武将的创建就完成了!但是如果我们现在进入游戏的话,他会显示为英文……那就用Fk:loadTranslationTable补一下翻译吧:
1Fk:loadTranslationTable{
2 ["xuexi"] = "学习",
3 ["st"] = "学",
4}
5
6local sunwukong = General:new(extension, "st__sunwukong", "god", 5)
7Fk:loadTranslationTable{
8 ["st__sunwukong"] = "孙悟空",
9 ["#st__sunwukong"] = "齐天大圣",
10 ["designer:st__sunwukong"] = "设计者",
11 ["cv:st__sunwukong"] = "配音演员",
12 ["illustrator:st__sunwukong"] = "画师",
13}
翻译表其实是个很纯粹的东西,你输入特定的字符串,就会根据翻译表输出对应的翻译字符。
以下是武将信息里除了武将名以外的其他信息:
"#武将名"是武将的称号,理论上要多长就有多长,不过考虑到实际显示,建议限制在7个字以内。
"designer:武将名"是武将的设计者,默认为“官方”。
"cv:武将名"是武将的配音演员,默认为“官方”。
"illustrator:武将名"是武将的画师,默认为“官方”。
这些在进入游戏后的武将一览都能看到。
保存一下,到游戏里看看我们的孙悟空吧。打开武将一览->学习包:
我们刚刚创建的悟空在此#
这里可以看见,我们命名的代码名称为st__sunwukong,我们可以拆分一下为"st"+"__"+"sunwukong",
其中"st"是我们刚才在翻译表中添加的前缀,这个会显示在武将的右下角作为角标【学】
"__"作为连接的字符串,是用来检测角标和武将真名的
新月杀会把武将的代码名称中,检测到的第一个"__"双下划线作为连接字符,连接字符前面的就是武将角标,后面的就是武将真名。
"sunwukong"就是我们刚才定义的武将真名。
好了,赶紧拿着你新写的这位武将去单挑吧!
PS:五体力白板孙悟空的单挑能力还是不弱的呢。^_^
