首页 新版太阳神三国杀武将扩展学习手册

新版太阳神三国杀武将扩展学习手册

举报
开通vip

新版太阳神三国杀武将扩展学习手册新版太阳神三国杀武将扩展学习手册 ------------------------------------------------------------------------------------------------ 新版太阳神三国杀武将扩展学习手册 新版太阳神三国杀 武将扩展学习手册 编者:独孤安河、幽蓝风暴 技术指导:女王受?虫 首发:百度太阳神三国杀Lua吧 编写说明 本手册从2012年11月20日开始编写,至2012年12月7日完稿,历时18天,完成了全册个二十八章节共164页的编...

新版太阳神三国杀武将扩展学习手册
新版太阳神三国杀武将扩展学习手册 ------------------------------------------------------------------------------------------------ 新版太阳神三国杀武将扩展学习手册 新版太阳神三国杀 武将扩展学习手册 编者:独孤安河、幽蓝风暴 技术指导:女王受?虫 首发:百度太阳神三国杀Lua吧 编写说明 本手册从2012年11月20日开始编写,至2012年12月7日完稿,历时18天,完成了全册个二十八章节共164页的编写活动。经校对整理与技术审查,于2012年12月12日在太阳神三国杀Lua吧正式发布。 本手册的编写目的在于试图通过一种不同的视角观察和学习太阳神三国杀中的武将扩展行为,对之前的各种武将扩展 教程 人力资源管理pdf成真迷上我教程下载西门子数控教程protel99se入门教程fi6130z安装使用教程 进行总结和整理,在忽略底层技术细节和专业概念的情形下了解如何对太阳神三国杀进行武将扩展。 本手册的适用群体,主要是初次接触太阳神三国杀武将扩展行为,尚未深入了解太阳神三国杀整体代码结构和具体实现,并稍微有一些Lua程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 基础的同志。 值得注意的是,考虑到本手册的编写目的,手册中的许多内容采用了直白但并不十分专业的表述方式,尽可能地减少了专业术语出现的数量。如需要真正了解和深入学习相关知识技术,请查阅有关学术文档和专业教程。 —————————————————————————————————————— ------------------------------------------------------------------------------------------------ 本手册在编写过程中,受到了太阳神三国杀吧及太阳神三国杀Lua吧吧友们的大力支持,在此向广大吧友特别是对本手册提供技术指导的吧友女王受?虫表示衷心的感谢。 由于编者自身水平及编写条件所限,本学习手册中不免会有疏漏和错误之处,敬请广大读者、吧友指正,并提出宝贵意见,以便我们不断提高。 祝吧友们学习进步~ 编者:独孤安河、幽蓝风暴 2012年12月12日 目录 第一章:创建一个新武将 一、开发环境准备 二、创建一个新的武将扩展包 三、创建我们的新武将 第二章:添加技能 第三章:武将美化 一、美化环境准备 二、添加武将卡牌 三、添加武将头像 四、添加武将标签 第四章:创建一个新技能 第五章:添加音效 —————————————————————————————————————— ------------------------------------------------------------------------------------------------ 一、打造自己的声音工作室 二、添加技能使用音效 三、添加武将阵亡音效 第六章:添加提示信息 一、添加代码注释 二、显示提示信息 三、启动全屏信息特效 第七章:武将变更 第八章:启用AI 一、创建我们的AI文件 二、真实的AI 三、动手写AI 第九章:修改距离 第十章:技能管理 一、技能判定 二、创建技能 三、获得技能 四、失去技能 第十一章:修改手牌上限 第十二章:体力变更 一、流失体力 二、制造伤害 —————————————————————————————————————— ------------------------------------------------------------------------------------------------ 三、恢复体力 四、流失体力上限 五、增长体力上限 第十三章:游戏进程的变更 一、创建阶段触发技能 二、跳过回合阶段 三、插入一个额外的回合阶段 四、启用翻面 五、获得一个额外的回合 第十四章:启用标记 一、添加标记 二、获得标记 三、失去标记 四、查看标记的数目 第十五章:卡牌转换 一、主动卡牌的转换 二、被动卡牌的转换 第十六章:卡牌传递 一、创建摸牌技能 二、游戏中摸牌 三、游戏中弃牌 四、从其他武将处获得牌 五、判断目标区域是否有牌 —————————————————————————————————————— ------------------------------------------------------------------------------------------------ 六、移动场上的卡牌 第十七章:用卡牌实现技能效果 第十八章:启用标志 第十九章:涉足判定领域 一、启用判定 二、更改判定 三、获得判定牌 第二十章:私家牌堆 一、向牌堆中添加卡牌 二、查看牌堆中的卡牌数目 三、从牌堆中移除卡牌 第二十一章:卡牌的锁定 第二十二章:卡牌免疫 第二十三章:让房间提供卡牌 一、提供主动卡牌 二、提供被动卡牌 第二十四章:启用标签 第二十五章:濒死结算 第二十六章:交换座次 第二十七章:创建主公技 一、创建由主公发起的主公技 二、创建由他人发起的主公技 第二十八章:强力技能 一、直接死亡 二、改换身份 三、原地复活 四、立即胜利 —————————————————————————————————————— ------------------------------------------------------------------------------------------------ 第一章 创建一个新武将 一、开发环境准备 作为武将扩展行为,大多都是在游戏目录下的extensions文件夹中进行的。所以先找到这个文件夹吧,没有的话自己在游戏目录下创建一个新的也行。 接下来就是准备代码编辑器了。据说大家都在用一个叫做“Notepad++”的软件,没有装的话赶紧下载安装一个吧。 OK,一切得当。 二、创建一个新的武将扩展包 每个武将都是有自己的家,像郭嘉同志就来自 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 包,夏侯渊老弟则来自风扩展包。理所应当地,我们要想新创建一个武将,就要先找到这个新武将所对应的扩展包。 没有,那么先为TA创建一个新的武将扩展包吧。还记得刚才提到的extensions文件夹吗,这是太阳神三国杀专门提供的扩展窗口。新的扩展包就建在这里。 打开extensions文件夹,新建一个文本文档?? 慢着,还没想好要给我们的扩展包起个什么名字呢~ 一般来说,给扩展包起名字有几个推荐的标准: ?尽量用扩展包中文名的英文 单词 英语单词 下载七年级上册英语单词表下载英语单词表下载深圳小学英语单词表 下载高中英语单词 下载 命名(见名知义)。 ?尽量由小写字母构成(为了AI加载顺利,还可以带一些数字和下划线)。 ?不能和已有的扩展包名字相同(不要重名)。 下面列举了太阳神三国杀常见的武将包名称,起名时可不要重复—————————————————————————————————————— ------------------------------------------------------------------------------------------------ 了哦~ 标准包:standard 一将成名2012扩展包:yjcm2012 风扩展包:wind ?SP扩展包:bgm 林扩展包:thicket 新3V3扩展包:special3v3 火扩展包:fire 怀旧包:nostal_general 山扩展包:mountain 倚天扩展包:yitian 神扩展包:god 智扩展包:wisdom SP扩展包:sp 翼扩展包:ling 一将成名扩展包:yjcm 测试包:test 悄悄地告诉自己:这些信息可以在游戏目录下的lua\config.lua文件中找到, 嗯~决定了,我们的扩展包就叫做“学习”扩展包好了,对应的名称为study~ 把新建的文本文档改名为study.lua,也就是用扩展包名称作为新的文件名,用lua做为新的扩展名。 下面来为这个扩展包添加一些必要的信息(该Notepad++出场了)。 使用代码编辑器Notepad++打开study.lua: 选择【格式】菜单中的【以UTF-8无BOM格式编码】项,否则在游戏中会有乱码出现的~ 然后写上这么两句: module("extensions.study", package.seeall) extension = sgs.Package("study") 这两句的通用形式为: module("extensions.扩展包名称", package.seeall) extension = sgs.Package("扩展包名称") —————————————————————————————————————— ------------------------------------------------------------------------------------------------ 不过呢,英文看着多不爽啊,所以再写一点翻译的东西把。 用sgs.LoadTranslationTable创建一个专属于这个扩展包的翻译表,然后把我们会在游戏中看到的内容写进去。 翻译的格式是:["原文"] = "译文" 每两条翻译之间用英文逗号分割。 现在写上一句:["study"] = "学习包",效果如下: 啊~标签中study.lua前面的小磁盘是红色的~这是在提示我们文件还没有保存,赶紧CTRL+S一下吧。 于是,一个新的扩展包就这样做好了。 不过由于这个扩展包里面没有武将,是一个大空壳,所以我们在游戏中的武将一览里面看不到它;但是当启动服务器的时候?? 已经能够看到它的身影了~ 至此,可以宣告扩展包创建成功~ 三、创建我们的新武将 创建新武将的话,首先也是要先想好武将的名字。 但是这件事情就简单多了,一般来说都是用TA的姓名的汉语拼音直接作为名字的。 比如司马懿的名字叫做simayi就可以了。 武将的名字比起扩展包的名字就随意了些,大小写字母的组合都可以,不过最好不要使用下划线的。不变的要求依然是:不许重名~ 那么,我们的第一个新武将的名字,孙悟空(sunwukong)怎么样,OK,就这么定了。 —————————————————————————————————————— ------------------------------------------------------------------------------------------------ 孙悟空是通过这个句子创建的: sunwukong = sgs.General(extension, "sunwukong", "god", "5") 创建武将的函数原型是: sgs.General( package, name, kingdom, max_hp=4, male=true, hidden=false, never_shown=false ) 翻译过来,便是: sgs.General(扩展包,姓名,所属势力,体力上限,性别,是否隐藏,是否完全隐藏) 相关参数解释: ? package(扩展包):统一写extension就行了。 ? name(姓名):没忘刚才好不容易起的名字吧,sunwukong,就它了~另外,如果是主公武将,需要在名字后面加上$符号,来显示这个武将"超凡脱俗"的气质。比如曹操就是caocao$什么的。 ? kingdom(所属势力):列在下面了—— ?魏势力:wei ?群雄势力:qun —————————————————————————————————————— ------------------------------------------------------------------------------------------------ ?蜀势力:shu ?神武将:god ?吴势力:wu ? max_hp(体力上限):就是勾玉的数目,不写的话默认是4。 ? male(性别):填true就是男性,填false就是女性,??什么都不写也是男性~ ? hidden(是否隐藏):填true就是隐藏了,填false就是不隐藏,默认当然是不隐藏了, ? never_shown(是否完全隐藏):依然是填true隐藏、填false或者默认是不隐藏。上面那个隐藏只是在游戏中不会被系统列在选将名单里,开自由选将的话还是能选到的(比如测试包里的五星诸葛亮);这个完全隐藏可是连自由选将都没希望找到的,当然现在我们的游戏中还没有这样的武将就是了?? 所以根据以上信息,我们的新武将确定为一只5体力上限的神武将男性孙悟空~ 保存一下,到游戏里看看我们的孙悟空吧。 打开武将一览,拉到最下面?? 好像很无语的样子??不过毕竟是成功创建了。 造成这个样子的原因,其实是刚才太兴奋忘记写翻译了。 回到那个sgs.LoadTranslationTable翻译表,添加一些翻译吧: 其中: ["武将名称"] 就是对武将本身名字的翻译; ["&武将名称"]是游戏中显示的武将名字,比如?SP貂蝉在—————————————————————————————————————— ------------------------------------------------------------------------------------------------ 游戏中显示为“貂蝉”而没有那些前缀,就是这里规定的; ["#武将名称"] 则是对武将称号的翻译,像?SP貂蝉的称号“暗黑的傀儡师”之类的都是在这里添加的。 另外,武将设计者的名字由 ["designer:武将名称"] 提供,不写的话默认为"官方"。还不快快签上自己的大名, 武将台词配音者的名字由 ["cv:武将名称"] 提供,默认为"官方";武将插画绘制者的名字由 ["illustrator:武将名称"] 提供,默认为"KayaK"。可以在武将一览的右上角看到这三部分的信息。 最后翻译表中的内容是这样的: 添加完翻译信息,这下可以庆贺我们的新武将诞生了~ 赶紧在游戏里面体验我们自己创建的武将吧。 PS:五体力白板孙悟空的单挑能力还是不弱的呢。^_^ 第二章 添加技能 白板武将虽然不算弱,但是游戏体验还是差了点。 解决方法,添加个技能吧。比如说??无双。 打开之前创建的study.lua,找到孙悟空的代码部分,添加如下代码: sunwukong:addSkill("wushuang") 就可以了。 在这里,像addSkill这样后面带括号的、可以帮我们完成一项功能的具体的方法,就是传说中的“函数”了。太阳神三国杀的绝大多数武将扩展行为,都是通过各种各样的函数分工合作,才能顺利完成—————————————————————————————————————— ------------------------------------------------------------------------------------------------ 的。 这个添加技能的函数原型有两个,分别是这样的: ? addSkill(skill) ? addSkill(skill_name) 其中skill是一个技能对象,表示一个当前文件中创建的技能;而skill_name是技能的名字,是一个字符串,表示引用一个已经存在的技能。我们这里用的就是第二个原型啦。 注意武将名称(sunwukong)和函数名称(addSkill)之间的那个符号,是冒号~ 因为我们的武将名称sunwukong在之前那个sgs.General函数的引诱下已经成为了孙悟空这个武将的形象代言人了,它代表了一个武将对象(General);而这个函数addSkill正是武将对象中的一个功能,我们称它为General的成员函数。一个对象调用自己的成员函数的时候,代码里需要用冒号手拉手,来表示这种调用关系的。 无双的技能名字是wushuang。一般地,技能的名字就是它的汉语拼音了,比如马术就是mashu,奸雄就是jianxiong,挑衅就是tiaoxin。 当然也有例外,如曹操的护驾是hujia,倚天包蔡昭姬的胡笳则是caizhaoji_hujia,毕竟不能重名嘛。 有关技能名字的信息,必要的时候还是要查看一下源代码的。想一想要添加的技能最早出现在哪个代码包,找到它,抄过来就行了。 源代码,从网上搜一下,会有的。比如下面的链接地址: (来自Paracel) —————————————————————————————————————— ------------------------------------------------------------------------------------------------ 有些技能虽然看上去是单独的一个技能,但实际上是许多小技能拼凑起来的,添加的时候要全部加上,漏掉了就不好用了。比如要添加神诸葛亮的七星,就要写上: 武将姓名:addSkill("qixing") 武将姓名:addSkill("#qixing") 武将姓名:addSkill("#qixing-ask") 武将姓名:addSkill("#qixing-clear") 就是这样。很狡猾是吧,没关系,源代码在手,一查便知,不怕不怕啦。 顺便提一句,七星里面那三个以#开头的技能就是传说中的隐藏技能。也就是说,虽然添加技能后武将会拥有这个技能,但是在游戏界面上却是看不到的。这下知道了为什么明明是四个技能,看上去却只有一个的原因了吧。 添加完技能后,武将一览里面立刻就能看到变化了: 一句话,就能添加一个技能,是不是很简单, 好了,现在我们的孙悟空同志也有技能了,到游戏里面体验一下吧。 (吕布:5555??你们欺负人??) 第三章 武将美化 武将有了技能,就该出来亮相了。但是总不能老让人家裸奔吧,该有的美化工作还是要有的。武将的美化,大体来说分为三个部分:武将卡牌、武将头像以及武将标签。当然,美化之前问一问,做好准—————————————————————————————————————— ------------------------------------------------------------------------------------------------ 备了吗,Let’s go~ 一、美化环境准备 先准备一下需要的字体吧:华康新篆体、金梅毛草行体国际码、方正隶书还 有方正准圆。没有,此时要相信,网络一定会满足我们的, 将这些字体安装到系统中,之后会用到的。 安装字体时,Windows XP\2000\98的系统,直接将字体文件复制到C:\WINDOWS\Fonts\目录下就可以自动安装了;Win Vista\7的系统,右键单击字体文件,选择Install项也可以安装成功的。 做武将美化还需要一个图片编辑软件,目测PhotoShop好像很火的样子,就它了~没有就下载安装一个吧。 然后找一张图片做武将原画,上网搜一下吧。 要是找三国人物的话,听说百度三国杀吧的五谷丰登里面有好多可用的素材哦~ 孙悟空的话??还是去百度图片搜索找找看好了。 嗯, OK,准备就绪。 这张怎么样, 二、添加武将卡牌 打开太阳神三国杀,在最上面找到DIY菜单,里面有个卡牌编辑器: 别犹豫了,打开看开吧: 称号:华康新篆体(显示的是DFNewChuan-B5),20号,行距2; 名称:金梅毛草行体国际码,36号,行距12; —————————————————————————————————————— ------------------------------------------------------------------------------------------------ 技能名字体:方正隶书,加粗,16号; 技能描述字体:方正准圆,9号; 小字字体:就宋体,7号吧。 调整后的效果: 接下来从文件菜单里面的导入刚才的武将原图。 效果: 图歪了,不过没关系,直接用鼠标拖动就能把它正过来: 再提一句:图像比例可以调整图片的大小,100,就是原样显示。 我们的图片看上去还是小了点,所以调整一下。数字随便试,只要比100大就能达到扩大效果了。同样地,如果图片太大了,把数字改成1,99之间的一个,就可以达到缩小图片的效果了。 好看多了不是, 接下来按照设定的武将信息,修改武将卡牌。 称号:齐天大圣;名称:孙悟空;所属势力:神;体力上限:5 如果武将有主公技,最好吧势力旁边那个方块勾上,卡牌效果会不一样哦~当然这里就不勾了。 效果: 啊,名称和称号最好都用繁体字,否则有些字会不能正常显示。 称号把名称盖住了,没关系,跟武将图片一样,这些都是可以直接用鼠标拖动改变位置的。就像这样: 接下来就是添加技能了。 在工具菜单里面找到添加技能,或者在武将图上右键单击找到它。 —————————————————————————————————————— ------------------------------------------------------------------------------------------------ 或者 然后在弹出来的小框框里面写上技能名字吧: 效果:(似乎不太好??) 这个怎么样,解决的方法是:随便改个字号,再改回来~ 至于技能的描述,单击武将牌上的小框框,会有虚线出现,在虚线里面直接写就好了~ 效果: 地方太小,谁让我们非要写那么多字的??技能简洁一点多好, 不过也没关系了,小框框的上边缘是可以拖动的,用鼠标拉到合适的高度吧。 顺便说一句,技能名也能上下拖动哦~ 最终效果: 偷偷地告诉自己,关于卡牌编辑器的详细使用说明,可以参考: 下面的工作依然是CTRL,S:保存~ 或者从文件菜单选择导出这一项。 保存的文件名,随便,反正待会儿还要改??(别抽??) 保存好的文件,像素尺寸是368×516单位,但是太阳神三国杀中使用的武 将卡牌是200×290单位的,不能直接使用。 所以看到此时早就等得不耐烦的图像处理软件PhotoShop一个神速抢过了话筒的时候可千万不要被吓着了。 使用PhotoShop创建一个新的PSD工作文件,设置画布像素大小为200×290,如果此时保存一下这个PSD文件还会有助于今后的可—————————————————————————————————————— ------------------------------------------------------------------------------------------------ 持续发展我会乱说么, 接下来赶紧把刚才做好的武将卡牌拖进来吧,使用PhotoShop的自由变换功能可以轻松改变图片的大小哦。 处理完毕~ 然后呢,对了,又该保存了。话说时刻记得保存真是一个好习惯啊。 选择文件菜单中的“储存为”命令,接下来就是重点了~ 储存的时候,要用武将名称作为文件名,储存格式选择JPEG,这可不能搞错了。 成果如下: 最后把这个jpg文件放到游戏目录下的image\card\文件夹中,任务就完成了~ 打开游戏看一看我们的武将卡牌吧: 武将卡牌添加成功~ 三、添加武将头像 武将头像和武将卡牌差不多啦,都是从武将原画中变化来的啦。 武将头像的相关信息是这样的: 像素尺寸:276×233 图片格式:png格式(注意这可不是刚才的jpg了) 存放位置:游戏目录下的image\generals\avatar\文件夹 这回我们直接上PhotoShop~来人,把武将原画拖进来~ 创建一个新的PSD文件,然后经过选择选区、自由变换等等各种调整?? 值得一提的是,虽说现在制作的是武将头像,不过可别真的—————————————————————————————————————— ------------------------------------------------------------------------------------------------ 只取原画中脑袋的一小块,周围的内容也带上点儿,最后保持脑袋在图片的中上部就好了。就像这样: 制作完成,储存为PNG格式。文件名,当然还是武将名称啦。 放到刚才提到的avatar文件夹里面去,武将头像也完成了~ 打开太阳神三国杀,启动游戏,然后点击修改头像,可以看到武将头像已经添加的游戏中了: 至此,武将头像添加成功~ 四、添加武将标签 好像也是差不多的东西呢。武将标签的信息是这样的: 像素尺寸:42×36 图片格式:png格式(和武将头像是一样的,) 存放位置:游戏目录下的image\generals\tiny\文件夹 制作武将标签的话,除了使用PhotoShop,还有一个简单的方法。还记得之前使用的卡牌编辑器吧,又轮到它出场了。 找到工具菜单里面的制作微型头像这一项: 点击,可以看到武将卡牌中出现了一个小框框,那就是用来制作武将标签的工具了。 不过武将原画太大了,脑袋装不进去?? 这么快就忘记了图像比例啊,改小点改小点。 调整好了,右键单击小框框,看到完成了吧, 那就完成吧。文件名还写武将的名称,就万事大吉了。 别忘了把武将标签放到那个tiny文件夹里面去~ —————————————————————————————————————— ------------------------------------------------------------------------------------------------ 到游戏里面体验??忽然想起这个武将标签好像只有在五谷丰登什么的特定时候才出现。不过??尝试过作弊吗, 开一局单挑,在出牌阶段选择作弊菜单的死亡笔记(好阴险),瞧瞧我们看到了什么, 武将标签出现了~ OK~搞定, 第四章 创建一个新技能 重头戏来了~ 前面我们就知道了,武将的游戏体验和TA的技能如何有着好大好大的关系。怎么样,五体力上限带无双的孙悟空是不是比五体力上限的白板孙悟空玩起来带劲儿多了, 现在我们要继续强化这种体验感了~打造真正拥有自己个性的新技能~ 听说周瑜因为长得帅所以能多摸牌,我们美猴王孙悟空怎么样,摸死你~ 现在打开刚刚遗忘在角落里的study.lua吧,要写代码了, 先把一份英姿的代码拷贝到我们的扩展包文件里面去吧。 什么,哪里搞到的,网上总会有大神帮忙的吧?? 不过话说回来,这些太阳神三国杀中已有的技能都是用C++而不是Lua语言写的,所以只翻游戏源代码应该是找不到它们的Lua代码的。 咱们私下里透露一下:网上实在找不到了,试试旁边的那本全技能Lua化手册吧。 —————————————————————————————————————— ------------------------------------------------------------------------------------------------ 言归正传,孙悟空那头都快上火了。 周瑜英姿多摸了一张牌,看到代码里面那个橘黄色的数字"1"了吧, 孙大圣那可是"美"猴"王"啊,才多摸一张牌哪儿说得过去啊,在后面加个零,多摸十张~ 行了,满意了。 核心代码已经完成,不过还有点需要修饰的工作要做。 技能名字要改改吧, 把整个技能代码段选中,CTRL+H把替换窗口叫出来。原来的技能叫什么来着??LuaYingzi,嗯就是它,写在"查找目标"那里。再起个新名字,就叫LuaMeihouWang好了,写在"替换为"那里。 点击全部替换,名字就改掉了~ 像这个样子: 然后是翻译(还记得那个sgs.LoadTranslationTable吧,): ["LuaMeihouWang"] = "美王", [":LuaMeihouWang"] = "摸牌阶段,你可以额外摸十张牌。", 翻译一个技能是有一些要注意的地方的。 翻译技能的通式是这样的: ["技能名字"] , "技能名字的译文", [":技能名字"] , "技能的描述", 技能名字的译文不要超过两个汉字,否则在游戏界面里面会显示不开?? —————————————————————————————————————— ------------------------------------------------------------------------------------------------ 技能名字前面加冒号,表示的是技能的描述。这个描述文本中可以加上格式控制标签以制造某些文字效果,就跟网页代码一样。比如用<b>和</b>将一段文本夹起来,这段文本就被加粗了,要知道字体加粗是可以来显示锁定技、限定技、觉醒技之类的提示语的。 现在技能已经写好了,剩下的只需要把这个技能添加到武将身上就行了。没错,还是用我们已经熟悉的addSkill函数,不过这次用的是第一个原型: addSkill(skill) 这是因为技能对象LuaMeihouWang是在同一个文件中创建好了的,不用引用别人的恩赐了~ 好,那就快点写上这么一句吧: sunwukong:addSkill(LuaMeihouWang) 技能就添加完成了~ 最终代码效果: 赶快到游戏里面体验这个拥有强力摸牌技能的齐天大圣孙悟空吧~ 第五章 添加音效 作为一个全方位立体化的武将扩展行为,音效的搅和也是必要的吧,耳旁还回荡着那动人的“谁敢杀我,啊??”我们的新武将怎么能不来跟个风呢, 一、打造自己的声音工作室 太阳神三国杀的声音文件是ogg格式的,保存在游戏目录下的—————————————————————————————————————— ------------------------------------------------------------------------------------------------ audio文件夹中。所以,别拿着什么wav、wma、mp3之类的干瞪眼了,试一试格式工厂吧。 严格地说,我们还需要拥有一个音频处理软件,用来进行可能的音频截取、音频合并(格式工厂也能做这个哦)、音频修整等操作;如果想使用自己的声音,还需要一个录音软件,甚至硬件上的配合(比如话筒)。 不过~Windows系统自带的MovieMaker也是可以利用的, 它的位置是 C:\Program Files\Movie Maker\moviemk.exe 只是貌似MovieMaker只能处理wma格式的音频,先把搞到的音频文件用格式工厂转换一下吧。 好的,这样基本上我们的声音工作室就成型了。 二、添加技能使用音效 之前在武将一览里面,我们的新技能"美王"配音是灰色的: 就是因为没有对应的配音文件嘛。这就去给它补上~ 从网上找一段孙悟空的音频,下载之。用格式工厂转换成wma格式,扔到MovieMaker里面裁剪成我们需要的样子,"保存到我的计算机",这样得到了处理后的wma格式的音频。再用格式工厂把处理后的这段音频转换成ogg格式,得到了我们需要的技能配音文件。(编者:其实我们是来炫耀肺活量的??) 不管怎么说吧,反正现在是得到了ogg的配音文件,但是~文件的名字还没改嘛。先想想技能的名字叫什么来着,嗯,是—————————————————————————————————————— ------------------------------------------------------------------------------------------------ LuaMeihouWang,所以配音文件的名字也就可以确定了,同样是:LuaMeihouWang。(编者:团结一致向前看~) 给技能配音文件起名字的通用方法是: ? 技能名字 ? 技能名字,编号 比如刚刚我们就是用的第一个方法。LuaMeihouWang.ogg。 至于第二个方法,是当我们觉得这个技能需要分情况说台词的时候,也就是有多个配音文件的时候,为了统一管理才用的。 想一想曹丕同学的技能行殇吧,行殇对象是男性时可用xingshang1,行殇对象是女性时可用xingshang2,行殇对象是曹操(虽然他算男的)时用的就是xingshang3了。 当使用第二个方法在技能名字后面添加编号的时候,在界面上相应地也会显示一个编号: 很霸气是不是, 所以知道了命名的规则,现在一个偷懒的方法出现了。如果技能配音与之前已有的配音相同的话,直接复制一份,改个名字就可以了。 接下来要做的就是把配音文件放到audio文件夹里面去了。但是~可不是直接放到audio文件夹下,而是放到里面那个skill文件夹下,因为我们现在做的是技能配音文件。 audio文件夹里面的情况,总共有四个文件夹: ? card文件夹:存放卡牌的音效,比如“不怕你哦,” ? death文件夹:存放武将阵亡的音效,比如“我还是太年轻了??” —————————————————————————————————————— ------------------------------------------------------------------------------------------------ ? skill文件夹:存放武将技能的音效,就是这里~ ? system文件夹:存放系统音效,比如“救一下嘛,” 把LuaMeihouWang.ogg放到audio\skill\文件夹中,工作就完成了~ 到游戏里面体验一下吧, 等等,这是什么东西, 原来是忘记翻译了。 打开我们的扩展包study.lua,在翻译表中添上几句台词: ["$LuaMeihouWang"] = "燕人张飞在此~",(孙悟空:,,,@,,????) 算了,还是按照实际的台词写吧, 台词的通用写法就是这样,用美元的那个符号引导: ["$技能名称"] = "台词译文", 或者说是: ["$技能名称与编号"] = "台词译文", 用于翻译那类带编号的技能配音。(孙悟空:有什么了不起的啊,不就是用配音文件的文件名嘛??) 写好后重新启动游戏,这下终于看到亲切的台词了: 搞定~ 三、添加武将阵亡音效 “霸业未成、未成啊??” 武将们总会有离开游戏的那一刻的,还是要给他们一个抒发壮志未酬满腔遗憾真不科学的感情的机会的啊。现在我们来为我们的新武将添加一个阵亡音效好吧。 —————————————————————————————————————— ------------------------------------------------------------------------------------------------ 其实和技能音效类似了,依然是各种选材、剪辑、格式转换工作,最后得到了我们需要的一份ogg格式的阵亡配音文件。 但是,文件名呢,毕竟不是技能配音啊,哪有技能名字可用啊, 其实,武将阵亡的配音文件的文件名,就是这个武将的名称了~所以我们现在做好的这份配音文件,就是sunwukong.ogg~ 把配音文件放到游戏目录下的audio\death\文件夹(这文件夹眼熟吧,上面才提过的。)中,阵亡配音也就有了, 等等,好像还少点什么事情没做??嗯,是台词翻译~阵亡了也要有那么几句话不吐不快嘛。 接着打开扩展包文件study.lua,拉到最下面,找到翻译表: 加上一句: ["~sunwukong"] = "不~还不可以死??",(孙悟空:,@,,,,,,@??) 算了还是按照实际情况写吧: 这句话通常意义上是这么写的: ["~武将名称"] = "武将阵亡台词译文", 最前面那个小波浪",",代表相反的意思,生的反义词自然就是死啦,所以这样就表示武将的阵亡台词了。(听说人家程序员叫:析构) 不用管那么多了,保存一下,赶紧到游戏里面看看效果吧~ OK~ 啊,还有一件事。如果是自己配的音,不要忘了把前面那条翻译: ["cv:武将名称"] = "配音人员", —————————————————————————————————————— ------------------------------------------------------------------------------------------------ 里面的配音人员改成自己的名字哦, 解决~ 第六章 添加提示信息 游戏的互动性很强大,太阳神三国杀自然也不例外。不仅仅是游戏界面,甚至还包括代码层次上的互动呢~ 一、添加代码注释 在Lua文件中,代码注释主要有两种,单行注释和区块注释。 单行注释的符号是英文状态下的两个减号"--",本行从这个符号开始,向后的所有内容都算作注释文本了。 区块注释的符号则比较复杂,像括号一样分为两个部分。 前半部分是英文状态下的两个减号和两个左侧的方括号"--[[";后半部分呢,就是两个右侧的方括号"]]"了。 被这两个部分括起来的文本,就都算作注释文本了。 悄悄地记住:被注释的文本是会被太阳神三国杀忽略掉的,所以可以在注释里面随便写东西喽~ 还有一个小窍门:区块注释可以用来封杀一段Lua代码,不让它们出现在游戏中(像上面那个区块注释的图可以瞬间让孙悟空重新变成白板,可怕??)。 使用了注释的话,被注释的文本会被Notepad++涂抹成绿色,看上去其实还是挺养眼的?? 注释有什么用处呢,答案:交流。 可以注明代码的作者、功能、版本信息; —————————————————————————————————————— ------------------------------------------------------------------------------------------------ 可以注明代码的参数要求如何、效果是什么; 可以注明代码的设计思路; 可以注明代码中还存在的问题、注明还需要写些什么; 可以注明代码的各种各样的细节信息?? 甚至可以写上一句“写完这一段要记得去吃泡面哦 ^_^”。 总之是??很有用的(培养办公室恋情的必备工具,)。 二、显示提示信息 如果说代码注释是写游戏的人们之间的交流,那么提示信息就让我们玩游戏的人也加入了这个温馨的圈子。 说到提示信息,首先应该认识一下太阳神三国杀为我们提供的一个信息结构体:LogMessage。 从源代码的src\server\roomthread.h文件中可以找到LogMessage结构体的详细信息。 从中我们可以看到,LogMessage是由以下一些参数构成的: ? type:提示信息的输出结构类型 ? from:提示信息中涉及的行为发起者 ? to:提示信息中涉及的所有的行为接受者的列表 ? card_str:可能涉及的卡牌信息 ? arg:可能涉及的一个参数 ? arg2:可能涉及的另一个参数(最多只能带两个参数) 首先,要显示提示信息,应先创建一条消息,也就是要产生一个LogMessage结构体的实际对象。对应的代码是这样的: —————————————————————————————————————— ------------------------------------------------------------------------------------------------ local msg = sgs.LogMessage() 通过这条代码,我们定义并创建了一个消息,名字叫msg。 然后呢,想想我们要向玩游戏的人说什么话。比如说: "Hello~太阳神三国杀向你 孙悟空 问好~" 在这句话里,我们表达的是一个问好的行为,而孙悟空则是这个行为的接受对象。因此对应到LogMessage的那些参数,可以想到: to,孙悟空。 而且我们也顺便就定义了这个提示信息的输出结构: Hello~太阳神三国杀向你 %to 问好~ 这里的百分号","表示接下来的内容是要被对应的参数替换掉的,所以到时候太阳神三国杀一看到这个,,就会把那个to换成我们设定的值,孙悟空。 现在我们同时还明白了那个type参数的含义。不多说了,赶紧在代码中定义这样的一个type吧。 把目光转向那个已经有点无所不能的样子的翻译表吧,在这里写上我们的输出结构: ["#hello"] = "Hello~太阳神三国杀向你%to问好~ ", 在这里,我们定义的消息输出结构类型的名字叫做"#hello"。 值得一提的是,在定义信息输出结构的时候,推荐使用引导符号"#"作为输出结构名字的一部分。 现在可以填充LogMessage结构体了。 —————————————————————————————————————— ------------------------------------------------------------------------------------------------ 由于这个输出结构中只涉及到了参数to,并没有涉及所有的参数,所以没有涉及的那些就可以不管了。 代码如下: msg.type = "#hello" msg.to:append(player) 还记得好早之前提过的一个问题吗, 一个对象调用自己的成员函数的时候,中间用冒号":"连接; 这里我们又遇到类似的事情了,请注意msg和type之间的那个小点"." 要知道type可不是什么成员函数,只是LogMessage结构体中的一个参数而已。所以这次我们不用冒号了,用小点(也就是英文的句号)连接这个对象和它的参数。 这种结构体中的参数,这种用来表现对象的各个属性和状态的参量,被称作对象(或结构体)的成员变量。 又默默地记下了一句话: 一个对象调用自己的成员变量的时候,中间用点"."连接。 目光向下移动??append,为什么这个不是","了, 其实在LogMessage的介绍里面已经知道了,to的值是一个列表,是所有接受者的列表。一个列表和一个接受对象怎么能等同呢,级别明显不够嘛~ append是一个用来向列表中添加项目的方法,所以这条代码的意思其实是说,把接受对象player放到to所代表的这个列表中去。 —————————————————————————————————————— ------------------------------------------------------------------------------------------------ PS:LogMessage中的这些成员变量,只有在填充to的时候使用append,而填充其它成员变量的时候用","就可以了。 本来以为没问题了,结果又引出了一个player??这是, 目光向上, 在那个function的括号里面,有四个参数self,event,player和data。 我们需要的player就是其中的第三个参数了。 它是一个角色对象,也就是传说的ServerPlayer,是玩游戏的人在太阳神三国杀中的代表。这个player里面包含了许多玩游戏的人的信息,比如在哪个游戏房间啦,周围挨着的有哪些角色啦,有哪些手牌啦什么的。 有关ServerPlayer的具体信息可以从源代码里面的 src\server\serverplayer.h中找到,这里就先不管它了。 OK,现在消息已经被我们填好了,接下来要做的,是把这条消息发送到游戏中去,让玩游戏的人能看到它。 看法宝~哦??不是,应该说:看代码~ room:sendLog(msg) 我们的消息就是通过这么一句轻轻松松地发送到了游戏里面?? 等等,room是什么,是游戏房间啦,房间, 玩游戏怎么也要有场地吧,别告诉我真是在太阳上面玩的?? room就是这样一个表示游戏场所的房间对象,而它的真身是传说中的Room老兄。在Room这里保存了一场游戏里面的很多信息,比如游戏模式啦,还有哪些武将存活啦,该谁行动啦什么的。 —————————————————————————————————————— ------------------------------------------------------------------------------------------------ room这个对象很重要,许多扩展行为都跟它有密切关系的,因为它可以帮我们做许多事情,比如现在就是它在帮我们发送这条消息的。几乎每次扩展,都要想办法先把它鼓捣出来,可真要和它搞好关系哦, 关于Room的具体信息可以在源代码中的src\server\room.h中找到。 提示:ServerPlayer对象(如player)可以通过getRoom方法找到Room, 好了不管那么多了,快到游戏里面看看我们发送的消息吧。当孙悟空发动美王技能的时候?? 成功~ 三、启动全屏信息特效 “智乱天下,武逆乾坤,哼哼哼哼??” 限定技和觉醒技的全场信息特效好酷哦,不过只要了解了这个全场特效是怎么来的,我们也可以试着做一个出来, 这次我们要用到的是一个叫做broadcastInvoke的函数,别看它长就躲着不出来啊??来给介绍介绍:还记得上文的Room吧,这回用的这个broadcastInvoke也是Room的一个成员函数呢。所以依然可以通过源代码中的src\server\room.h查看它的具体信息。 broadcastInvoke的原型是这样的: ? broadcastInvoke(packet, except=NULL) ? broadcastInvoke(method, arg=".", except=NULL) —————————————————————————————————————— ------------------------------------------------------------------------------------------------ 有两个原型啊??不过放心好了,我们这次只需要用到其中的第二个原型: broadcastInvoke(method, arg, except) 翻译过来就是: broadcastInvoke(方法名称, 参数, 例外) 让Room帮我们忙,总要告诉它我们要做什么。方法名称,正是用来区分这些可能的行为的。 所有行为的列表,可以在源代码的doc\protocol.txt中查到(告知式命令)。 而我们要做的全屏信息特效,属于动画类的方法,所以这个method参数的值就是"animate"了。 再看arg参数,就是具体的执行效果参数了,这里我们用"lightbox"表示全屏特效,然后考虑要显示的话。 但是??要显示什么话啊,“悟空,你还是跟为师西天取经吧??”嗯,就是它了。 于是再次轮到我们多次躺枪的翻译表出场了,上回定义消息输出结构类型就是在这里搞的,这次定义全屏信息也要找它??反正是跟文本有关的事情它就都逃不了干系?? 写这么一句: ["$tangseng"] = "悟空,你还是跟为师西天取经吧?? ", 用美元符号引导着,定义好了这个信息。 这样,arg的值就是:lightbox:$tangseng。 except是一个例外,表示不参与特效的那个ServerPlayer角色,—————————————————————————————————————— ------------------------------------------------------------------------------------------------ 默认是NULL,也就是所有玩游戏的人都能看到这个特效。所以这里直接忽略它吧。 现在真是材料齐全,只待下锅了~ 好的,立刻给出实现这个特效的具体代码,为: room:broadcastInvoke("animate", "lightbox:$tangseng") 快点到游戏里看看吧~ 忽然发现,这个特效只持续了2秒种,好像有点短。 没事,再加一个时间参数吧,4秒怎么样, 其实对于全屏特效,arg值的一般格式是: "lightbox:信息:持续时间" 所以代码如下: room:broadcastInvoke("animate", "lightbox:$tangseng:4000") 要知道太阳神三国杀里面表示时间,是以毫秒为单位的,所以想表达4秒钟,就要写4000才对。 好了,现在全屏特效也被我们成功地做出来了,好好欣赏吧, 第七章 武将变更 有的武将有时候可以变身成为其他的武将,比如群雄势力的蔡文姬可以在游戏开始时发动技能归乡成为魏势力的SP蔡文姬。说到变身,我们孙悟空当然有话要说了,七十二般变化可不是凭空吹出来的~那么现在,我们就从代码上,找回昔日悟空变身的风采吧。 这一次我们要用到的,依然是Room的一个成员函数,名字唤作changeHero。先从源代码中的src\server\room.h里面看看它的原型吧: —————————————————————————————————————— ------------------------------------------------------------------------------------------------ changeHero( player, new_general, full_state, invoke_start = true, isSecondaryHero = false, sendLog = true ) 哇,参数好多啊?? 不过仔细一看,似乎也没什么可怕的。先看看第一个参数吧: 哦,又是player,刚才我们已经认识它了,表示的是玩游戏的那位,不过现在要称呼它为"要变身"的那位了。 然后接下来: new_general,就应该是变身之后的新武将的名字了,也很好理解。 full_state,直译就是"满状态",填true的话就意味着变身之后身体健康、体力满满;填false的话就只是变个脸换个技能而已,原来的什么体力值啊都没有变化。 invoke_start,是指是否以开始游戏的状态进行变身。默认值是true,表示需 要以开始游戏的状态变身。这是什么意思呢,因为有些武将在开始游戏的时候会做一些游戏准备啦,比如神诸葛亮需要额外发七张牌—————————————————————————————————————— ------------------------------------------------------------------------------------------------ 作为七星、神吕布需要获得两个暴怒标记什么的。假设现在要把武将变更成神诸葛亮了,如果此处填true,那么变身时可以摸七张牌进行七星准备,要是填的是false??那么变成的就只能是一个没有星星的白板诸葛亮了。 isSecondaryHero,是指变更的位置。填true就是变更副将,填false就是变更主将,而默认值是false啦。当然,这个参数只有在双将模式下才有效, sendLog,表示是否发送提示信息。默认是填true的,也就是发送信息,而填false自然就是不发送。如果选择发送信息的话,变身之后会在出牌记录那里显示一句:某某 变身为 某某某。是不是很人性化, 现在我们想让我们的武将变更成什么呢,好吧,就变成孙权吧。 借用一下貂蝉脱壳的代码?? 变更成孙权的代码则是: room:changeHero(player, "sunquan", true, true, false, true) 据此将整个技能的代码修改成我们需要的样子,并把它加到孙悟空身上: 当然,不要忘记了翻译。 这样就好了~ 到游戏中感受一下吧。 变~ 成功~ —————————————————————————————————————— ------------------------------------------------------------------------------------------------ 别以为是在糊弄人哦,对面那个也是孙悟空只是因为当前玩的是同将模式,看游戏记录就都明白了, That’s exciting! 第八章 启用AI 可以看到,当电脑选择了我们自己设计的扩展武将的时候,有时并不会主动使用那些新设计的技能。就像刚刚我们在同将模式下遇到的那个样子,在双方都选择新武将孙悟空的时候,我们作为玩家可以在游戏开始时作出选择,发动技能进行武将变更;然而电脑却直接无视此技能,依然让孙悟空出来打酱油。 出现这样的情况,主要就是因为电脑其实并不知道怎么使用这些技能、或者说,在遇到诸如“是否发动,”的选择题的时候,电脑没办法作出决定——它不知道哪个答案是正确的嘛,干脆直接忽略了省着心烦?? 不过不要泄气,我们还是有办法帮助电脑解决这些问题的~什么都不会,直接把答案告诉它不就完了,准备好一张小纸条,甭管是什么选择题判断题的,答案全写里面,到时候电脑遇到问题了,直接抄过来就OK啦~(别说我们作弊??好孩子都知道考试不要作弊??人家真的是好孩子??) 好了,当电脑有了这张纸条,可以在岔路口作出判断的时候,我们就认为电脑已经像我们一样学会思考了,或者说,我们成功地启用了AI。AI者,人工智能也, 所以知道下面要干什么吧,没错,就是去写那张用来作弊??哦不,—————————————————————————————————————— ------------------------------------------------------------------------------------------------ 是思考的小纸条了。当然,在太阳神三国杀里,它叫做AI文件。 一、创建我们的AI文件 太阳神三国杀的AI文件,都是保存在游戏目录下的lua\ai\文件夹中的。所以我们的AI文件也要在这里创建。 就跟创建我们的扩展包文件一样,先新建一个文本文档吧: 然后就是正确地命名这个文件了。 其实也很简单。AI文件的命名规则是: 对应扩展包的文件名,"-ai" 看看周围的AI文件,是不是都是这个格式的, 还记得我们的扩展包文件名字叫做study对吧,所以这个AI文件的名字就叫做:study-ai;至于扩展名,当然还是lua了。 》 实际上到此为止,我们的AI文件就创建完成了。因为AI文件可没有扩展包文件那么复杂,还要写那两句文件信息;它只需要在文件名上遵守规则,与扩展包保持统一,那么太阳神三国杀就可以正确识别和加载它了。 打开看看吧, 就是这样。 二、真实的AI 下面我们要准备开始往AI文件里面写东西了。但是,具体要怎么写呢, 先打开一个写好的AI文件看看吧。比如说?? —————————————————————————————————————— ------------------------------------------------------------------------------------------------ thicket-ai.lua,这是林扩展包的AI文件。 从文件中可以看到,AI文件中的内容,大体上分为两种: 一种,是给某样东西或者某些样东西赋予某些数值; 还有一种,是一些返回true或false的函数。 就像这个样子: 想像一下我们做选择题的过程, 假设现在有一道选择题摆在我们面前: 小明的爸爸有三个儿子,大儿子叫做大毛,二儿子叫做二毛。请问三儿子叫做什么,A:三毛;B:小明;C:不知道 这道题的问题是:“请问三儿子叫做什么,” 当然,只看这个问题是没法回答的,因为我们什么都不了解。不过还好,这道题通过第一句话告诉了我们许多信息: “小明的爸爸有三个儿子,大儿子叫做大毛,二儿子叫做二毛。” 我们好像可以根据给出的这些信息去尝试着作答了。 但是,当我们尝试着解答这个题目的时候,忽然发现,条件不够用了。题目问的是第三个儿子的名字。而我们只知道前两个儿子的名字,以及另外一个孩子(小明)的名字。这样就有了两种可能: ? 小明就是第三个儿子,所以答案是小明,选B ? 小明是女儿的名字,因而我们无法得知第三个儿子的情况,只能选C 此时,如果老师口头又告诉我们了一个信息:小明是个纯爷们~ 这下答案就一目了然了, —————————————————————————————————————— ------------------------------------------------------------------------------------------------ 我们的AI也是同样的道理。 在游戏的某个时刻,电脑会遇到一些需要拿主意的问题(比如:三儿子叫什么,);同时系统会根据游戏当前的状况,提供一些已知的信息,或者说,叫做环境数据(比如:小明的爸爸,@,,,??)。 电脑会尝试着分析这些信息,找出问题的答案并付诸实施。整个AI系统的核心是一个叫做smart-ai.lua的文件,在这个文件中实现了大多数情况下的分析策略,从而多数情况电脑还是可以自己找到答案的。 然而对于我们自行设计的扩展包来说,环境给出的数据有时就显得不够用了,我们需要额外提供一些更为细致的信息,或者说,叫做特征信息。而且,电脑已有的决策通常只是一般化的策略,不一定适用我们的扩展包,所以我们还要告诉电脑遇到当前问题时我们自己的决策。 所以,为了解决一个问题,所需要的内容就包括了: ? 问题本身(三儿子叫什么名字呀,); ? 环境数据(小明的爸爸、大儿子大毛、二儿子二毛??); ? 特征信息(小明纯爷们~); ? 问题决策(这题选B。)。 问题本身和环境数据都是系统直接给出的,所以我们的AI文件只需要提供那些特征信息和问题的决策就可以了。 所以AI文件的内容分为那两种就可以理解了: 给某样东西赋予数值,其实就是在为解决可能的问题提供特征信—————————————————————————————————————— ------------------------------------------------------------------------------------------------ 息; 而那些返回true或false的函数,就是针对特定问题的决策函数了。 看看,AI文件也是很有条理的哦, 三、动手写AI 在写AI之前,和创建一个新扩展包一样,要先看一下文件的编码。我们的AI文件依然要采用【格式】中的【以UTF-8无BOM格式编码】这个菜单项。否则有可能最后让我们的工作前功尽弃哦~ 好了,现在我们就去写AI了~让孙悟空动起来, 首先,获取问题。 还记得是什么地方开始出现选择的吗,好像是一个提示框,问我们“您想发动技能【变身】吗,”——就是它了。 对应到代码里面,就是: room:askForSkillInvoke(player, "LuaBianshen", data) askForSkillInvoke同样是Room的一个成员函数,用于询问是否发动某项技能,其原型为: askForSkillInvoke(player, skill_name, data) 翻译过来,就是: askForSkillInvoke(角色对象,技能名字,环境数据) 所以当系统遇到这句话的时候,就会向当前角色(player)询问是否发动技能(skill_name);表现在游戏中,就是弹出那个提示框了。 这,就是我们获取到的问题了。 做一点小笔记:有时Room会轮休,ServerPlayer会来帮它问我—————————————————————————————————————— ------------------------------------------------------------------------------------------------ 们是否发动技能。只不过在ServerPlayer门下干活的askForSkillInvoke换成了这个样子: askForSkillInvoke(skill_name, data) 不过就是没有了那个player参数了,毕竟前面有ServerPlayer撑 腰嘛。当然了,效果是一样的。遇到它的时候可不要不认得了, 然后就该在我们的小纸条study-ai.lua里面写上问题的解决 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 了。 为了告诉电脑我们写的内容是针对askForSkillInvoke这个问题, 要这么写: sgs.ai_skill_invoke.LuaBianshen 它的取值有两个,true——发动这个技能,或者false——不发动。 这一小段的通用格式是:sgs.ai_skill_invoke.技能名字 其实呢,sgs.ai_skill_invoke是smart-ai.lua中的一个表的名字,这 个表里面集中记录了电脑遇到各种可以主动发动的技能时的处理动 作。然后那个点"."看着眼 熟吧,它表示后面的技能名字属于这个表,有点类似于结构体和 它的成员变量的关系(怪不得用法都一样)。 所以现在我们这样写: sgs.ai_skill_invoke.LuaBianshen = true 就表示,电脑遇到系统询问发动变身技能的时候,总是变身。 保存起来,电脑就知道怎么做了。赶紧去游戏中看看热闹吧~ 从游戏记录中看得更明白: (我们操控的是孙悟空[1],没有选择变身;电脑操控的是孙悟空 —————————————————————————————————————— ------------------------------------------------------------------------------------------------ [2],发动了变身。) 然而,有时我们需要电脑按事情情况进行选择,而不是不管三七二十一,一 律选true,这时我们就要在文件中用到函数了。使用函数计算出什么时候该用true,什么时候又该用false,使得电脑看上去更加智能。 先把代码改写成函数的样子: 还记得解决问题需要那些内容吗,没错, ——————————————————————————————————————
本文档为【新版太阳神三国杀武将扩展学习手册】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_841159
暂无简介~
格式:doc
大小:84KB
软件:Word
页数:43
分类:互联网
上传时间:2017-09-01
浏览量:241