编写太阳神三国杀Lua基础教程
太阳神三国杀,是一款基于C++ QT GUI框架的三国杀非官方开源软件,开发者:Moligaloo(太阳神上),现由Mogara团队,继续更新。拥有智能AI可以实现联机和单机的两种游戏方式,并能通过DIY接口进行自由的个性化修改和添加更多元素。本经验教你编写属于自己的lua!(基础教程)适用于1217(V2)版。
在开始之前我们了解下lua。
Lua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。
脚本语言,被嵌入到太阳神三国杀里面运行!
认识一个包最基本的定义语句(不知道我的语言新手们能否看懂。。):
module("extensions.xxx", package.seeall)
extension = sgs.Package("xxx", sgs.Package_CardPack)
其中“sgs.Package_CardPack”是定义该包的类型,CardPack为手牌,武将包这样写:
extension = sgs.Package("xxx")
这样一个合格的空白包就做好了!
不过呢,英文看着多不爽啊,所以再写一点翻译的东西吧。
用sgs.LoadTranslationTable创建翻译标签,然后把我们会在游戏中看到的内容写进去。翻译的格式是:["原文"] = "译文"每两条翻译之间用英文逗号分割。(lua对大小写、逗号有严格要求哦!)
比如我的包名为study,那么在里面写入语句:
["study"] = "学习包",
最后效果:
sgs.LoadTranslationTable{
["study"] = "学习包",
}
这样在游戏中就显示为“学习包”。
将lua拖入extensions文件夹,打开游戏,
此时一个名为“study”的扩展包就被添加成功了!
创建新武将的话,首先也是要先想好武将的名字。但是这件事情就简单多了,一般来说都是用TA的姓名的汉语拼音直接作为名字的。比如司马懿的名字叫做simayi就可以了。武将的名字比起扩展包的名字就随意了些,大小写字母的组合都可以,不过最好不要使用下划线的。不变的要求依然是:不许重名!
那么,我们的新武将名为herobrine(mc里面的恐怖生物)吧!
创建一个新武将的函数原型为:
sgs.General(package,name,kingdom,max_hp=4,male=true,hidden=false,never_shown=false)
对应值:
sgs.General(包名, 武将名, 势力, 体力上限, 性别, 隐藏, 完全隐藏)
①package(扩展包):统一写extension就行了。②name(姓名):没忘刚才好不容易起的名字吧?herobrine,就它了!另外,如果是主公武将,需要在名字后面加上$符号,来显示这个武将"超凡脱俗"的气质。比如曹操就是caocao$什么的。③kingdom(所属势力):势力的拼音,比如吴就是wu。(ps:神是god不是shen)
④male(性别):填true就是男性,填false就是女性,……什么都不写也是男性!
根据函数原型,我们创建一个名为“herobrine”的男性角色!
herobrine = sgs.General(extension, "herobrine", "god", "6")
再写上翻译,启动游戏,发现“him”武将!
一个白板6血武将创建成功!
白板武将虽然不算弱,但是游戏体验还是差了点。解决方法?添加个技能吧。比如说……遗计。。
herobrine:addSkill("yiji")
像addskill这样的称之为函数。各种函数结合在一起才能顺利完成各种操作!
addskill拥有两种用法,其函数原型为:
1、addskill(skill)
2、addskill(skill_name)
skill是一个对象,添加一个脚本中已定义的新技能,而skill_name是一个string(字符串),用来添加一个已经存在的技能。
addskill在sgs.General下工作于sgs.General,所以addskill是sgs.General的成员函数。
武将有了技能,就该出来亮相了。但是总不能老让人家裸奔吧?该有的美化工作还是要有的。武将的美化,大体来说分为三个部分:武将卡牌、武将头像以及武将标签。
打开太阳神三国杀,在最上面找到DIY菜单,里面有个卡牌编辑器,在里面进行各种编辑,这部分教程与主题不太贴,就一代而过了,需要的童鞋到网上找教程吧!
只添加他人的技能是不是不够过瘾?好了,重点 was arrived.打造真正拥有自己个性的新技能!
听说周瑜因为长得帅所以能多摸牌?我们美猴王孙悟空怎么样?摸死你!
写一份英姿的代码吧:
LuaYingzi = sgs.CreateTriggerSkill{
name = "LuaYingzi",
frequency = sgs.Skill_Frequent,
events = {sgs.DrawNCards},
on_trigger = function(self, event, player, data)
local room = player:getRoom()
if room:askForSkillInvoke(player, "LuaYingzi", data) then
local count = data:toInt() + 1
data:setValue(count)
end
end
}
看见函数“toInt() + 1”了吗?我们就在这里下手,多摸10张!toInt() + 10
把整个技能代码段选中,CTRL+H把替换窗口叫出来。原来的技能叫什么来着……LuaYingzi,嗯就是它,写在“查找目标”那里。再起个新名字,就叫LuaHerobrine好了,写在“替换为”那里。
别忘了写翻译!
最后addskill(skill)注意不是skill_name!
herobrine:addskill(LuaHerobrine)
至此一个6血神势力武将就OK了!
至此武将基本教程结束!
较为简单,使用
module("extensions.xxx", package.seeall)
extension = sgs.Package("xxx", sgs.Package_CardPack)
定义手牌包!
添加一张手牌的函数原型为:
xxx = sgs.CreateTrickCard{
name,
class_name,
subtype,
target_fixed,
can_recast,
suit,
number,
on_effect,
end,
}
“CreateTrickCard”为单体锦囊
CreateArmor为防具
CreateWeapon为武器
防具、武器的原型与锦囊不同!
例如,我们添加一张“三顾茅庐”卡牌,目标摸三张牌,目标武将牌翻面。
则代码为:
sgml = sgs.CreateTrickCard{
name = "sgml",
class_name = "sgml",
subtype = "single_target_trick",
target_fixed = false,
can_recast = true,
suit = sgs.Card_Spade,
number = 1,
on_effect = function(self, effect)
effect.to:drawCards(3)
effect.to:turnOver()
end,
}
name为卡牌名,class_name为类名,与name保持一致即可,subtype为卡牌类型,can_recast能否重铸,suit花色,number点数,on_effect使用后执行其成员函数的效果,effect.to是目标,effect.from是效果来源,drawCards函数,摸牌函数,turnOver函数,翻面。
drawCards的函数原型为drawCards(X)
turnOver的函数原型为void turnOver()
编写好了,但游戏中还没有?这在于我们没有setParent(相当于addskill),用法:
xxx:setParent(extension)
但是这种方法用一次只加一张,如何大规模添加呢?就像杀,数十张,serParent就显得力不从心了,此时我们需要定义过程。
我们需要一个大批量添加卡牌的过程,我们取名为“addcard”的过程,其代码为:
addcard = function(card, snn)
local n = #snn
for i=1, n, 2 do
local tcard = card:clone()
tcard:setSuit(snn[i])
tcard:setNumber(snn[i+1])
tcard:setParent(extension)
end
end
该自定义过程的用法为 addcard(xxx ,{suit, number})
例如我要添加一张黑桃A一张方片K,则写成:
addcard(sgml ,{sgs.Card_Spade, 1, sgs.Card_Diamond, 13})
翻译标签中,
表示换行,即Enter键。
版权声明:本站【趣百科】文章素材来源于网络或者用户投稿,未经许可不得用于商用,如转载保留本文链接:https://www.qubaik.com/answer/109393.html