添加技能

3. 添加技能#

白板武将虽然不算弱(其实已经很弱),但是游戏体验还是差了点。都2025年了,再端上五血白板多少有点欺负自己了……

解决方法?添加个技能呗,比如说……〖无双〗?正好标包有,也不用麻烦我们写了。

在vscode切到刚才的xuexi/init.lua,在引入孙悟空的代码下面加个代码:sunwukong:addSkill("wushuang")

1local sunwukong = General:new(extension, "st__sunwukong", "god", 5)
2sunwukong:addSkill("wushuang")

就可以了。

备注

在这里,像addSkill这样后面带括号的、可以帮我们完成一项功能的具体的方法,就是传说中的“函数”了。新月杀的绝大多数武将扩展行为,都是通过各种各样的函数分工合作,才能顺利完成的。 (请回忆之前Lua:函数一节)

像new()、addSkill()这样右侧带有小括号的代码被称之为函数, 函数是调用其他部分代码的依据、是多个部分互相沟通的渠道, 可以这么说,函数是新月杀扩展的根基。

技能的内部名称一般是他的拼音。

要注意的是,〖无双〗是吕布这个技能的中文名,而现如今,技能重名更是家常便饭,你看界吕布也有个〖无双〗嘛~

所以我们给孙悟空安上〖无双〗的时候,要找的是这个技能的“内部名字”,或者说——本名

最简单的方法就是直接全局搜索“无双”,找到翻译部分的代码, 因为翻译表是一一对应的,所以会有个["wushuang"] = "无双", 这样我们就知道标吕布的〖无双〗名字叫"wushuang"了。

至于General:addSkill(),这个是真正赋予武将技能的函数,有了它,孙悟空才能拥有这个技能。 该函数的原型如下:

--- 为武将增加技能,需要注意增加其他武将技能时的处理方式。
---@param skill Skill @ (单个)武将技能
function General:addSkill(skill)

显然,这个函数可以接受一个技能Skill,也就是一个属于技能对象Skill的变量; 但同时,这个函数也可以接受字符串,此时就可以添加别人的技能了~ 如果你想一口气给武将加多个技能的话,可以用addSkills{"技能名1", "技能名2"}

注意武将名称(sunwukong)和函数名称( addSkill )之间的那个符号,是冒号!

因为我们的武将名称sunwukong在之前那个 General 函数的引诱下已经成为了孙悟空这个武将的形象代言人了,它代表了一个武将对象( General );而这个函数 addSkill 正是武将对象中的一个功能,我们称它为 General 的成员函数(亦称方法)。一个对象调用自己的成员函数的时候,代码里需要用冒号手拉手,来表示这种调用关系的。

无双的技能名字是wushuang。一般地,技能的名字就是它的汉语拼音了,比如马术就是mashu,奸雄就是jianxiong,挑衅就是tiaoxin。

当然也有例外,如曹操的护驾是hujia,倚天蔡昭姬的胡笳则是qyt__hujia,毕竟不能重名嘛。 有关技能名字的信息,必要的时候还是要查看一下源代码的。

方法很简单,先点击左侧栏的放大镜开始全局搜索,然后将排除文件去掉 (这样就能搜索所有的文件了),然后搜索我们想搜索的技能名就行了:

../../_images/2-1.jpg

借由全局搜索功能找到想要的技能名#

保存一下,打开游戏,放到实际对局试试吧!

备注

想稳定选到孙悟空的话,需要利用自由选将功能。创建房间之前启用自由选将,然后在选将时右键单击待选武将牌即可。

../../_images/2-2.jpg

会无双的悟空#

这回总可以好好单挑了,五血无双还没负面技,总该……