饥荒tuning.lua原文件modmain.lua怎么用

《饥荒》武器mod制作攻略教程 武器mod怎么做 _单机_新浪游戏_新浪网
《饥荒》武器mod制作攻略教程 武器mod怎么做
14:50:45& &来源:
  在《饥荒》的世界里怎么能少的了mod呢?它可以大大增加我们的可玩性,下面就为大家带来了饥荒武器mod制作图文教程,小伙伴们想不想学学怎么制作mod呢?下面快跟我一起来看看吧。
  下载模板mod
  工具:
  Notepad++(所有可以编辑文本的都行,包括记事本)
  Textool(版本最好1.3,出了事故我不负责)
  Spriter(非必备)
  Photoshop(能改图片就行,包括画图,但出了事故不负责,例如白底、白边、白图。)
  modmain.lua文件
  下载并解压我发的模型mod文件
  打开解压后的文件
  找到modmain.lua
  (如果你使用的是notepad++)右键modmain.lua,点edit with notepad++
  (如果你使用的是sublime)打开sublime,把modmain.lua拖进去
  武器的主要文件
  打开s文件夹
  打开prefabs文件夹
  找到goldenspear.lua
  用文件编辑器打开(方法如上层)
  图片文件
  打开image文件夹
  打开inventoryimages文件夹
  用textool打开goldenspear.tex
  只是一张图片。什么都没有。。。。
  用文本编辑器打开goldenspear.xml
  里面的代码是这样的。这里要注意,如果把那个tex文件改名了,那么这里的两个 也要改名。这里很容易忘记
  u1、u2、v1、v2都是指图片的大小。相当于PS改图片大小
  动画文件(A)
  打开anim文件夹
  打开gold_spear.zip这个压缩包
  找到atlas-0.tex这个图片文件
  用textool把这个文件转化成文件
  用textool把修好的图转化成tex文件
  塞回去(覆盖之前的文件)
  动画文件(B)
  打开anim文件夹
  打开goldenspear.zip这个压缩包
  找到atlas-0.tex这个图片文件
  用textool把这个文件转化成文件
  用textool把修好的图转化成tex文件
  塞回去(覆盖之前的文件)
  进阶篇
  代码文件
  打开s文件夹
  打开prefabs文件夹
  找到goldenspear.lua
  用文件编辑器打开(方法如上文)
  1。如何让你的武器能点燃物品
  将这行代码添加
  inst:AddComponent(“lighter”)
  到这行代码后面
  讲解:
  inst:AddComponent(“lighter”)是让一个物品可以燃烧的代码
  inst:AddComponent --添加一个组件。所有原版组件都在data\s\components这个文件夹里面
  一些组件的用处可以看看带有这个组件的物品。
  (“lighter”) --一个组件的名字。作用是可以点火
  2。如何让你的装备可以当工具使用
  将这行代码添加
  inst:AddComponent(“tool”)
  ponents.tool:SetAction(ACTIONS.CHOP)
  到这行代码后面
  inst:AddComponent(“inspectable”)
  讲解:
  inst:AddComponent(“tool”) --添加工具组件。
  ponents.tool:SetAction(ACTIONS.CHOP ,1) --让这个东西有斧子的作用,效率是1
  把CHOP改成MINE就能挖矿了(当镐子用)
  改成HACK就能砍藤蔓和竹子了。(当砍刀用)
  3。如何让你的武器攻击带毒
  在local function fn(Sim)前面加上这个
  local function poisonattack(inst, attacker, target)
  ponents.poisonable then
  ponents.poisonable:Poison()
  bat then
  bat:SuggestTarget(attacker)
  target:PushEvent(“attacked”, {attacker = attacker, damage = 0})
  在inst:[url]http://AddComponent(”inspectable“)[/url]后面加上这个inst.speartype = “poison”
新浪声明:新浪网登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
《饥荒》里面肉可是我们日常补充饱食的重要食物,但是肉有些少怎么办呢?下面作者就为大家带来了饥荒刷肉机制作方法与效果测试,小...
来自:单机
《饥荒》石虾这个生物繁殖能力非常强,怎样防止石虾繁殖就是我们所要解决的问题,下面作者就为大家带来了饥荒怎样防止石虾无线繁...
来自:单机
  《饥荒》DLC海难龙心可是个好东西,而且还是非常稀有的物品,今天笔者就为大家带来了饥荒海难海难刷龙心方法图文详解,小伙伴...
来自:攻略秘籍
《饥荒》DLC海难中有个海怪boss大家了解它吗?这是个看似非常强力其实很弱的一个boss,下面就为大家带来了饥荒海难海难海怪特性与...
来自:单机
手基本不要去手贱招惹一些怪。吃一些采集到的浆果和萝卜基本都能饱腹。大力士不要完全吃饱。饱食在100上下就好了。如果可以在第二...
来自:单机
中国网络游戏排行榜(China Game Weight Rank)是由新浪游戏推出的目前国内最全面、最专业、最公正的最新网络游戏评测排行榜,涵盖2010至今内所有新游戏,力图为中国游戏玩家打造最值得信赖的新网游推荐平台。
评天下游戏、测产品深浅—新浪中国网络游戏排行榜CGWR! 
全民手游攻略
“全民手游攻略”是新浪游戏为全球手游玩家量身打造的一款手游攻略大全及专业游戏问答社区APP。“全民手游攻略”涵盖Apple Store游戏畅销榜前150名手游,网罗最新手游通关秘籍,帮助玩家畅玩手游;打造最全手游攻略资料站,帮助你用最省钱的方式吊打土豪。最火爆专业的游戏问答,让众多游戏大神带你开启不
同的手游人生,寻找和你志同道合的小伙伴一起并肩作战。
新浪游戏大事记
16年01月14日
16年01月14日
15年12月15日
15年11月19日
15年11月16日
15年01月08日
14年12月27日
14年12月17日
14年03月27日
14年01月09日
13年12月27日
13年12月07日
13年10月11日
用微信扫描二维码
分享至微信朋友圈《饥荒》MOD汉化图文教程 MOD怎么汉化_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
《饥荒》MOD汉化图文教程 MOD怎么汉化
上传于|0|0|文档简介
&&游戏攻略
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩3页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢16-03-09丨【mod】饥荒MOD编程入门_饥荒游戏吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:146,402贴子:
16-03-09丨【mod】饥荒MOD编程入门
不镇楼不吸睛,随手而写。前言:本文重点介绍饥荒MOD脚本编写的一些经验。因为本人比较懒,不喜欢配图,只写长文。出于兴趣而写,原本的目的只是整理我自己的知识体系,所以,爱学不学,嫌太长,嫌太难,嫌太枯燥,请右上点红X。可以问我问题,但我不会都回答,什么问题会回答?没准,看心情。欢迎小学生修改党,我希望这会成为你们进入有趣的编程世界的一个契机。这个时代的智能设备正在不断产生质的飞跃,我大胆地,在未来,编程一定会和读书写字一样,变成一项会对生活的方方面面产生巨大影响的重要基本技能。不要觉得编程是什么高大上的技能,也不要有畏难情绪,就把它当成读书写字一样自然就可以了。严格来说,我们做MOD,实际上是在编写脚本而不是编程。前者需要依赖其它程序来运行,后者在编译后能独立运行。不过厘清这个概念对于制作MOD来说不重要,还是习惯于说编程。
以前发的mod都太散了,...
圣诞...元旦快乐! 这是...
2L地址,勿占!!!! ...
新版电子游戏来袭,注册送惊喜,超多免费游戏!
基本入门为编程0基础的人解释一些基本概念,这部分占本文的一半内容,有一定基础的人可以跳过2、 饥荒MOD框架为想要制作MOD但不清楚饥荒MOD框架的人,快速了解mod框架限于本人MOD经验,写得并不完全,只是突出讲了重点的内容。3、
实例和注释一些代码实例和注释,也包含了人物制作教程的代码部分。主要是代码和注释,让新手能通过模仿来快速上手。4、
DEBUG与测试,以及自行积累知识的一些技巧目前没写,因为看到蛮多人急需编程入门的教程,就先发出来了,后续会加上另外,我会在楼中楼里附上网盘,内附自己这段时间积累的MOD资料、实例和自己做MOD过程中随手记录的一些内容,没有整理,非常零散,仅供参考
第一章、基本入门编程0基础的人,要想学习制作MOD,阻力是比较大的,因为缺乏一些基本的编程概念,只懂得复制别人的代码或者在它们的基础上稍加改变,遇到稍微复杂一点的代码,就束手无策了。对于MOD崩溃,也几乎没什么办法。我这里不想费太多时间在解释基本概念上,这里只做简单介绍,目的是减少你阅读后续内容上的障碍。基本概念常量:初次赋值之后,数值不变的量。一般是集中大量写在脚本的开头,或者专门用一个文件存放,典型代表就是TUNING.lua里的那些值。使用时,直接引用他们的名字就可以。这样做的好处是,当你想要改变某些值的时候,你只需要在初始定义这个量的地方,改变它的值就行了。举个例子:饥荒里的武器攻击力,都是长矛攻击力的某个倍数。如果你不使用常量,而是一个一个填写具体数值的话,当想要对游戏全局的武器攻击力做统一调整的时候就比较麻烦了。比如说我希望长矛的攻击力变为20,其他的武器的攻击力也相应降低,这时候,你直接更改长矛攻击力这个常量,就显得非常方便。 变量:和常量一样,可以被引用。但变量有一些不一样的地方:它们的值能被反复改变,它们有自己的作用域。作用域的概念,我在下面单独讲。这里只简单说说变量的值能反复改变,能帮我们做什么。一个典型的代表:人物的饥饿值,这个值在游戏里几乎每时每刻都在不停变化着,这样一来,我们就可以根据不同的变化,设置不同的效果,比如沃尔夫冈不同的饥饿度下有不同的形态。而这是常量做不到的,因为常量在开头定义之后就必须保持不变。 作用域:变量的作用域,指的是这个变量的生效区域,在作用域以外的地方,你引用这个变量就会造成出错。作用域的判断,对于我们编程比较熟练的人来说,一般都是相对比较简单的事,但对0基础的人来说,可能就有些困难。这里不展开细讲,只告诉你,作用域分为整体和局部。在整个系统中都有效的变量,我们称为全局变量,而至能在一个小范围内有效的,则称为局部变量。饥荒MOD脚本的语言是lua,在这个语言里,全局变量在声明时无需附加任何内容,而局部变量则需要在最前面添加local。这个作用域的主要价值在于,使得你免于混乱。比如说,在被攻击的时候,需要计算所受到的伤害,为了方便进行多次计算,我们把这个数值设置为一个变量。但是,面对的敌人的攻击力会有变化,自身的防具减伤也会有变化,这时候我们就希望,计算结束,变量被引用到血量变化之后,这个变量能消失掉,不会影响我们下一次计算其他的伤害。这就是局部变量的重要作用。当然,局部变量还有另一个好处就是读取它的数据,要比全局变量快一些,不过,提高MOD性能不是本篇教程的重点,就不详细展开了。总而言之,全局变量,不到必不得已的情况,应当尽可能少用。 声明、引用、定义和赋值:在上面我多次提到了声明和引用,可能有些人不太清楚这两个术语的意思。我这里就顺带把定义和赋值一起讲了。定义,就是告诉系统,我设置了的这个变量/常量是什么。声明,就是告诉系统,我设置了一个变量/常量,你给我记好了。定义和声明是不一样的,但常常会混在一起。如果你只是想写写mod的话,不了解他们的区别也没关系,只认为是定义就够了。引用就是告诉系统,我要用这个变量/常量来做某某事,比如说用于某个表达式的计算,系统就会帮你读取储存在其中的数据。赋值就是告诉系统,往这个变量/常量里存入你给出的数据。注意,此处的数据,不仅仅指数字,可以是这个编程语言允许的任何类型,比如说一段文字(字符串),一个布尔值(真或假)等等。在某些语言比如C语言中,定义和赋值是可以分开的。但在饥荒MOD的脚本语言lua中,这两者是连在一起的。对一个变量的第一次赋值,就是对它的定义了。数据类型:对变量赋值,就是给它写入数据,那就涉及到了数据类型的问题。在初次赋值给一个变量时,所给予的值的数据类型,就是变量的数据类型。此后再给这个变量赋值,就必须赋予同一数据类型的值,如果值不同,就会导致系统崩溃(除了nil)。这里不展开细讲,只针对lua语言,简单地列出MOD中常用的几种类型。Nil:表示无效值,可以给任何数据类型的变量赋这个值。Boolean:包含两个值:false和true(假和真)String:字符串,用一对双引号或单引号括起来Function:函数,这个会在下面讲Table:表,这个概念会在后面讲
函数:这是编程里的一个非常重要的概念。展开来讲也非常复杂,这里只做简要介绍。一句话简单概括:函数与变量的重要区别,可以做这样的类比:一个变量,就好比是一个属性,你可以给一个客体以某个属性,让它可以被描述,比如说,属性:可以被烧毁。而函数,则是一种操作方法,你让一个客体拥有一个函数,就是让它有某种操作。比如说,操作方法:如何被烧毁。函数由函数名,参数表和函数体组成。函数也和变量一样,能被引用,也有作用域。不过与变量不同的是,函数需要单独定义,在不同的编程语言中,函数的定义格式不一样,但都少不了上面所说的三个基本组成。在lua中,函数也可以看成是变量,可以被赋值。Lua中,函数定义的基本格式如下为:Function 函数名(参数表)函数体end如果希望函数的作用域是局部的,则在function 前面添加local。 函数是怎样工作的呢?首先,你需要明白,定义函数并不会让函数工作。只有执行了函数语句才会让它工作。还是拿计算伤害来做例子。你定义了怎么计算伤害的函数,参数为攻击者的攻击力和防御者的护甲。这个函数在定义之后,本身并不会立刻工作。只有你设定了一系列的流程,让函数在出现攻击状态的时候触发,才能算是执行了这个函数。这时候函数是怎么工作的呢?函数执行的时候,输入了两个参数:攻击者的攻击力和防御者的护甲。在函数体中,经过一系列的计算,得到了结果,利用return返回来,由变量接收或者加在各种表达式里使用。需要注意的是,即使是没有参数的函数,在执行时,也必须写成这样的形式: 函数名() 函数的作用是什么呢?就是使得你的编程显得更有逻辑,模块化。定义好一个函数之后,就不再需要管这个函数里面详细的执行过程(也就是函数体写了什么),我们只需要知道这个函数的名字,参数表和返回值,和这个函数有什么作用。因为在饥荒的MOD中,大量的函数是没有返回值的(也就是返回值为nil),执行这样的函数,目的在于使用它的功能。 函数是做饥荒MOD时最重要的东西。我们在脚本中写代码,就是在执行一条条函数,了解这些函数在什么时候会触发,需要哪些参数,有什么功能,返回值是什么,是非常重要的。我们是在原游戏的基础上做MOD,也就是说,有很多已经定义好了的函数可以供我们使用。打个比方,饥荒这个游戏,就好比一部车,函数就是这部车上面的零件,它让这部车能够拥有某些功能:启动,刹车等等。我们现在觉得这部车不能满足我们的需要了,那么,很显然的,做适当的改装,要比重新造一部车容易。做MOD,就好比是做一些改装。既然是改装,那你就有必要了解到,你所需要改装的部分,需要哪些零件。有些核心零件是非要弄清楚不可的。 现在饥荒MOD本身的结构是非常开放的,但官方没有给出详细的说明文档,当我们想要实现一项功能的时候,我们不知道官方有没有给出来,怎么办呢?我的建议是,思考一下游戏里的各种功能,以及他人已经发布的MOD,有没有和你的需求类似的,去参考一下相应的代码。这是一种自适应学习的能力,我从上个月月初,开始学习制作,到现在一个月过去了,从没有任何lua编程经验,靠着查找资料、参考MOD、与人交流、制作实践等多种方法,到现在,已经积累了相当丰富的知识,足够写下这么一篇教程。关于如何自适应学习,这是另外一个大话题,这里按下不表,若是以后有空,会专门写一篇来阐述。
表:表不是一门编程语言的必须概念,但这个概念在饥荒MOD里使用得非常频繁。的整个框架,也非常依赖于表。表的重要作用也和函数一样,是为了让你的编程显得逻辑清晰。比方说,现在有4个个体,a,b,c,d,有多项属性描述health,sanity,hunger,damage,armor,attack_period,walkspeed,runspeed。这些属性,对于4个个体来说,有的有,有的没有,我们要怎么组织起来呢?用多张表连起来,就是一个好主意。首先,我们来给属性分一下类,health,sanity,hunger,是饥荒中的三大基本属性,格子单独成一类,damage,armor,attack_period是和战斗有关的,分类为combat,至于walkspeed,runspeed是和移动有关的,分类为locomotor。那么,我们就有多张表了:一张总表:个体属性表 这个表中的每一个元素,都是一张表,现在不妨取a1的战斗属性表出来,是这样的:
那么,我们想要引用a1的damage的时候,怎么办呢?先在总表第一横栏中找到a,然后在竖栏中找到combat,这样我们就得到了提示:转去找a1的战斗属性表。然后在战斗属性表中,我们在横栏中找到了damage,这时候竖栏中只有一项,就不必再查找了。我们在查找过程中,寻找的a,combat,damage 就是所谓的索引。我们按先横后竖的的,a为1级索引,combat为2级,damage为3级。按顺序最后找到damage的具体的值(20),就是所谓的值。这个值不仅仅是数值,比如说在总表中找到的a1的战斗属性表,也可以称为值。再拓展一些,如果说战斗属性表中的竖表不只有一项,而是有两项:max,min,此时我们想要查damage最大值,该如何呢?那就要增加一个四级索引,max。在编程里的调用语句就可以写成这样:当你想要引用a的伤害最大值时,你就可以写<bat.damage.max 结合饥荒Mod编程,我们常常会看到类似这样的一条语句。<ponents.sanity:DoDelta(-10) 这句话的意思是当前对象的精神减10.具体是怎么操作的呢?首先,里这么多个体,要在茫茫人海中找到你,必须要有索引,这个索引就是inst,然后,inst下有很多属性类,我们需要的精神值,归类为components,也就是组件。组件这个概念,是饥荒为了编程上的逻辑清晰而创造出来的一个概念。后面会详细说明。然后我们继续寻找,就是sanity。这时候你可以看到sanity后面是:而不是之前的那些点号.
这是因为,我们是希望执行这个函数。如果是想要引用这个函数做其他操作的话,还是要用点号. 的。学过C++的人都会了解类的概念,对这个肯定不陌生。没学过的人呢,看我在下面关于类的解释。
类和面向对象编程:类这个概念,就是在面向对象编程的思想上发展起来的。为什么要使用类呢?就是因为面向对象编程显得逻辑结构清晰,易于实现、互动和维护。那么,什么是一个类呢?在编程上,可以理解为一些变量和函数的集合。这个集合是封装起来的,其中有一些变量和函数你可以访问和引用,称为公有变量和公有函数,还有一些是你访问不到,也无法使用的,就是私有变量和私有函数。需要注意的是,类本身只是一个逻辑结构,并不是实体。用现实的东西举个例子,自行车就是一个类的概念,它有很多基本属性:颜色,材质等等,也有很多操作:骑、前进、刹车等等。属性就是变量,操作就是函数。颜色、材质,是你能够看到的,就是公有变量,而内部的转盘的颜色你看不到,就是私有变量。而骑和刹车的操作,是你能够决定的,就是公有函数。而前进这个操作,你没法直接进行,你必须要反复踩踏板,才能让自行车前进,所以前进就是私有函数。在头脑中想到自行车这个概念,就是类。而想到你的自行车,就是一个具体的实体。结合到饥荒MOD里,sanity这就是一个类,这里面有很多属性:当前精神值,最大精神值等等,也有很多操作:精神增加/减少,设置当前精神值,设置最大精神值等等。而具体到一个人物的sanity,那就是这个类的实体了。实际上,在lua里,只有表,没有类这个概念。但是饥荒的游戏制作者为了编程方便,还是用某种手段,在表的基础上,类这个概念创造出来了。我们只需要认识到,怎样使用一个类就可以了。引用类中的变量,操作方法就和引用表中元素一样。如果想要调用函数,则需要将点号.改成:,并且在函数名后面添加(函数参数表)。比如说人物的当前精神值,人物的最大精神值等等,同时也有一些操作函数,比如上面举例的DoDelta。我之前说过了,在lua里,函数也可以看成变量。如果你想要引用这个函数,比如说引用去给一个函数赋值,那么,上面的:就要改成点号.,而且后面的(-10)也要去掉。如果你想要执行这个函数,那就要用冒号: 并且添加相应的参数。
第一章到此结束。
第二章:饥荒的基本框架其实我并未完全掌握所有的框架知识,所以我只根据我已经掌握的框架知识,提供一点参考意见。 就以我所见到的大多数MOD来说,都是围绕着修改、制作新物品/生物/人物,以及添加界面组件来做的。添加界面组件这一方面,我还没有实践过,没有获取太多的知识。所以只谈如何能够逻辑清楚地修改、制作新物品/生物/人物(统称为实体),这是一个进入门槛较低,但想要精通则需要花费大量时间积累知识的领域。 除了常用的一些必备类以外,修改、制作新实体,都需要在以下四个大类的基础上进行:Prefab(预设物),Component(组件),StateGraphic(状态图),Brain(AI)
这四者的区别,我直接根据Klei论坛的Ipsquiggle所写的帖子Wots The Diff??Prefabs, Components, Stategraphs, And Brains,将其帖子的核心思想提取出来做一些说明。 Prefab和Component,是大多数MOD都必须要接触到的东西,是最值得注意和研究的。用一句话来概括他们的区别: Prefab 表述了一个实体 是什么。而Component则表述了一个实体能 做什么。 举火坑的例子来帮助理解:Firepit(火坑)是一个实体,我们需要对它进行描述,所以它就成了一个Prefab,我们会写一个名为Firepit的脚本,放在prefabs文件夹下。然后,火坑能干什么呢?它可以燃烧,可以接受燃料。所以我们就有了burnble,fueled这两个Component。那么Prefab和Component是怎么联系起来的呢?我们看到,主体是Prefab,所以我们应该是把组件往主体上添加。在饥荒MOD中的语言就是AddComponent。 这就是饥荒MOD里关于实体编程的最基本的逻辑:设定一个预设物,然后往它的身上添加组件以实现各种功能。 这样做有很多好处,不过不是本教程的重点,就不多提了。当我们知道了这么一个简单的编程逻辑之后,关于实体功能上的很多事,就迎刃而解了。凡是游戏里已经有的功能,我们可以通过“阅读拥有该功能物品的代码à找到相应组件à给我们想要增加功能的实体添加改组件 à部分修改 ”来做到。而游戏里的许多常用的组件,都提供了很多十分方便的修改接口,只要你能读得懂组件的代码,就能很轻松地完成许多新功能。举个例子:晨星法杖(黄宝石法杖),可以右键点击地板召唤晨星。这个物品有一个spellcaster的组件,就是召唤晨星的关键。这个组件下有一个函数型变量,spell,和相应的公有函数SetSpellFn。spell就是用于控制召唤晨星的函数。在黄宝石法杖下,这个函数被设定为creatlight。而如果我们不想召唤晨星,而是想要召唤青蛙雨,或者就是简单地想要弄一个群体回血,只需要写一个函数然后用SetSpellFn赋值给spell就可以了。 总结起来,组件的功能,并不限制于组件本身的功能上,他们提供的触发接口也是十分重要的。
学到这一方法之后,一个自然的问题就来了:我们该如何找到想要的组件?对于有点编程基础的人来说,阅读代码并找到其中的关键部分,并不困难。但对于没有基础的人来说,读代码就和读天书一样,想要在其中找到关键部分十分困难。但是,我们现在已经了解饥荒MOD的编程结构了,也知道它主要依靠表的形式组织数据了,只要有恰当的方法,即使不熟悉代码,你也可以快速找到想要的内容,这同样适用于只想看游戏内部数据,无意修改的人。 第一步:找到定义实体的脚本文件。几乎所有的实体,相应的脚本文件都储存在\data\scripts\prefabs下面。一般来说,一个脚本只定义一个实体,只需要找到实体的控制台英文名(请去参考饥荒wikia),然后直接搜索文件名就可以了。但实际上也有许多例外,同类型的,比如说和spier_warrior就定义在spider.lua下,你要找蜘蛛武士的定义,直接搜索spider_warrior就找不到了。但这也好说,这和spider毕竟关系紧密,也能很快搜出来。然而有一些实体是用其他的分类方式集合在一起的,直接搜索名字很难找到。对这一部分,一个方法是用文件文本搜索功能(Notepad ++就有提供),但有时候这个方法也不好用。想要找到,就需要依靠你灵活变通的智慧和丰富的想象力了,这部分说起来很麻烦,直接忽略吧。如果实在找不到,去询问别人是最好的办法。 第二步:在脚本文件内搜索AddComponent,一个实体要想拥有某个组件的功能,必须要使用这个函数,函数的参数就是组件的名字。搜索结果全部出来之后,仔细看函数的参数,挑出你觉得名字像是你要的组件的参数,搜索。看看相应的代码,一般是这样的形式:ponents.组件名.其他内容,估计大概是这个组件之后,就可以去\data\scripts\components文件夹下搜索这个组件,然后阅读其中的代码了。结合原本拥有这个组件的预设物的相应代码阅读,会有助于你的理解。至于说理解能到什么程度,就全看编程经验的积累了,遇到不懂的地方,多找人求教就是(你说没人愿意回答?大家都很忙,愿意无偿给你解答,只是心情好,不愿意回答也是十分正常的,不妨多问几个人,或者多读点编程的书) 但有时候,我们不是想要添加新的物品和新功能,而是想要修改原有物品的功能,或者给原有物品添加新功能,怎么办呢?这时候就需要使用饥荒MOD提供的了。AddPrefabPostInit(&prefab&,fn)修改预设物。Prefab为实体被定义的名字,也就是控制台c_give()、c_spawn()指令的参数。Fn是一个函数,内部定义具体的修改操作。AddPrefabPostInitAny(fn) 这个和上面的是差不多的,只是这个会针对每一个实体进行修改,加入判断语句之后就可以一次性修改你想要修改的某一类目标了。这两个函数是在游戏开始时载入一次,然后,在实体每次生成的时候,执行fn。所以切记,试图利用这个函数在游戏里动态修改实体属性,是做不到的,你必须想其他办法。至于说其他的API,这里不做介绍。官方提供的所有API,全部都定义在modutil.lua文件夹下,需要者可以自行查阅。 需要明白的是,component是这个游戏最精华的东西,也是最难的部分,因为component实在太多太杂了,涉及的内容也包括了饥荒这个游戏的方方面面,当你深入了解下去,你就会惊讶于component竟然可以做那么多事。
讲完了Prefab和Component,也该提一下StateGraphic和Brain。但实际上,这两部分用得少,算得上是高级修改了。本文作为入门教程,只能点到即止。想要具体的描述,还需另开一篇。我只能简单地说,StateGraphic是用于控制动画播放的,比如战斗。人物的combat组件控制伤害的输入和输出,而StateGraphic里的一个State:”attack”,则控制整个过程中的动画播放。而Brain,就是所谓的AI。饥荒里的AI,是用行为树的模式编写的,叶子节点写在behaviour文件夹下或者定义在生物的brain文件里,非叶子节点,则全部写在sript下的behaviour.lua里。 没有编程基础的人看到这段话肯定感觉云里雾里了,如果觉得难以理解,就请跳过。没有编程基础,要想理解行为树,相对来说还是比较困难的。
2017新游戏首选新游戏「修魔世界」1OO%免费新游戏_下载游戏1OO%送礼!2017新游戏_今日开测,下载游戏1OO%送微信红包!非RMB首选新游戏!
在这四个大类之外,还有两个在饥荒里非常常用的东西:事件和标签。善于利用他们,可以帮助你非常灵活地控制功能的触发,是十分强大的动态触发工具。 什么是事件呢?这里引用一位前辈czfshine的通俗解释:事件就是你按下鼠标,降低生命,主角死亡啊等,这一类的事情就叫做事件。你玩饥荒的时候,它每时每刻都在等待事件的发生,之后调用对应的事件处理函数,处理事件,再继续等待。 饥荒本身就有大量的原生事件,比如说”hungerdelta“在你的饥饿变化时就会触发,”killed”在你击杀生物时就会触发。那么要如何利用这些事件呢?这就需要使用到ListenForEvent(“evet”,fn)这个函数了。第一个参数是事件名,第二个参数是操作函数。这个函数的含义就是在监听到某个event发生的时候,触发fn。只要你能了解到什么时候会触发事件,你就可以利用这个函数,在触发事件的同时增加你想要的效果。比如说,我们希望在击杀时获得经验,就可以监听killed事件,然后在fn里写上获得经验的代码。那么我们要怎么了解有什么事件呢?除了平时编程、阅读他人代码获得积累之外,还有一个最直接的办法:在script文件夹下,使用文本搜索寻找PushEvent。触发事件的办法有很多,但PushEvent是最常用的。这个函数在使用时的写法是PushEvent(“event”,data={传递数据表}),比如说killed这个event,传递数据表里写的就是victim = murdered或者victim = ingredient之类的,等号左边是要保存在data里的数据,右边则是这次事件发生时,被击杀的目标。然后返回来看ListenForEvent,fn的参数也是固定的,前两个输入参数分别是inst和data。Inst就是当前监听函数的对象,data就是上面PushEvent用到的data。就说击杀这个事件,如果我们需要根据击杀对象不同来获取不同的经验,我们就需要知道击杀对象是谁,这时候,你根据前面PushEvent的表述,就可以知道,data.victim就是我们的击杀对象了。然后就可以进行进一步的操作了。利用PushEvent可以创造自己的事件,然后利用ListenForEvent监听,就可以灵活地选择函数触发的事件了。 特别地,有时候,我们希望只监听1次。比如说,我们想要设置,只有下一次击杀会给我们加BUFF。这时候就需要在监听结束后移除触发的函数,这就需要使用inst:RemoveEventCallback(&event&, fn) 例:local function onkill(inst,data)其他内容inst:RemoveEventCallback(&killed&,onkill)--当执行onkill的时候就会执行这一句,从而将onkill函数和killed这个事件区分开来。
end inst:ListentForEvent(“killed”,onkil) 附带一提,还有一个函数,和ListenForEvent的用法很像,就是WatchWorldState(&worldstate&, fn)这个是监测世界状态的,比如说有没有下雨啊,是不是月圆啊,现在是白天还是黑夜啊,季节啊之类的。具体的参数,请自己去搜索游戏的脚本文件,或者参考其他MOD的代码,这里就不多提了。和它相关的一个变量是TheWorld.state 然后说另外一个系统,标签系统。这个系统有三个重要函数添加标签AddTag 移除标签RemoveTag判断是否有标签 HasTag
这个系统主要用于对一类目标执行某种效果。比如说,蜘蛛,蜘蛛武士和蜘蛛女王,都带有spider标签,我们设计的一个击杀buff是,击杀蜘蛛后,一定时间内,攻击会附加毒伤害。你要是一个个写判断是蜘蛛,蜘蛛武士还是蜘蛛女皇,还有地下的各种蜘蛛,就会比较麻烦,代码也不够简洁。这时候,使用标签系统,判断是否有HasTag就非常方便而且简洁了。 以上只是这个系统的一种简单使用示例,实际上这个系统可以非常灵活地使用,具体还请自己在编程中积累经验。
我会告诉你我一个字都没看吗——————————那不就是游戏s吧,还不快点进去关注?
另外,顺带介绍一些常用的系统函数,注意使用时要区分大小写,如果在modmain中使用,那些没有前缀的,比如SpawnPrefab,需要添加GLOBAL声明。 SpawnPrefab(&prefabname&)--生成一个预设物inst.Transform:GetWorldPosition(x,y,z)-获取inst的位置inst.Transform:SetPosition(x,y,z)--将inst转移到地图坐标为(x,y,z)的地方FindEntity(inst, radius, fn, musttags,canttags, mustoneoftags)--寻找inst附近radius距离内的物品。local ents =TheSim:FindEntities(x,y,z,range, musthavetags, canthavetags, musthaveoneoftags)--寻找以(x,y,z)坐标点为圆心,range为半径范围内的东西,一般配合下面的遍历ents来使用for k,v in pairs(ents) do 要做的事情end 这里就不写具体怎么用了,随便参考一些MOD吧。
另外,许多常用的函数、常量等,可以在这些文件中找到定义entityscript.lua --全局脚本函数simutil.lua - 一些公用函数modutil - 全部的MOD APITUNING.lua - 一些关于游戏数值的设定,是常量constants.lua - 游戏里的一些常量设定,比如说燃料的类型,科技的等级等等。
第二章完。
第三章:几个常用示例的注释这一章主要讲几个常用的示例,有一些语句是标准的,必须写,了解它们的含义,有助于我们的编程。首先,我们需要在游戏根目录/mods文件夹下建立一个文件夹来保存我们的mod,不妨就叫mymod。 先来看看最基本的: modinfo.lua这个文件写在mymod的根目录下,用于保存MOD的信息和设置。每个mod都必须有这个文件。代码如下:name = &[DST]Samansha& --mod的名字description = &The princess of Elf&---mod的描述author = &dangdang&--mod的作者version = &1.0& -- Mod的版本,当你在创意工坊要想更新MOD的时候,版本必须不一样。forumthread = && klei论坛的下载地址,没有可以不写。 api_version = 10 --API版本,当前而言,联机版填10,单机版填6 dst_compatible = true --以下几个参数都是设置是否兼容的,第一个是联机版,后面三个分别是单机原版,巨人统治和海难dont_starve_compatible = falsereign_of_giants_compatible = falseshipwrecked_compatible = false all_clients_require_mod = true --联机版特有,当你要加入自己设计的图画的时候,必须在这一项填trueclient_only_mod = false --联机版特有,是否为客户端mod,如果填了true,上面的必须填false。icon_atlas = &modicon.xml& --以下两项控制mod的图标icon = &modicon.tex&
server_filter_tags = {&Samansha&,}--服务器标签,加载了这个mod的房间/服务器,会在房间信息的标签栏里显示相应的标签信息。 configuration_options = {} --mod设置,没有可以不写,
然后是第二个重要的文件:modmain.lua这个文件是mod的主函数,mod里所有的资源,最后都要经过这里传送到游戏里去。其中的内容非常复杂,这里只说些基本的部分,更多的请自己阅读其他人的mod去积累。代码如下:PrefabFiles = { --预设物文件表,你所有自己写的prefab脚本,都必须要在这里添加,才能使用。
&samansha&,
&hat_eyeshade&,} Assets = { --添加材质文件,包括动画啊,图片什么的,都在这里添加。不过在这里只需要添加在modmain函数中会用到的部分,prefab专属的材质文件不需要放在这里。
Asset( &IMAGE&,&images/saveslot_portraits/samansha.tex& ),
Asset( &ATLAS&,&images/saveslot_portraits/samansha.xml& ),} 其他的,需要注意,modmain运行时,是一个独立的环境,如果需要使用全局变量或常量,如TUNING,SpawnPrefab,都需要添加GLOBAL声明,如:local TUNING = GLOBAL.TUNING 所有的MOD API,也必须写在这个文件里。需要注意的是,如果是联机版,API在客机上运行时,有可能会产生错误。建议添加如下指令:If GLOBAL.TheNet:GetIsServer()
then --这一句判断当前电脑是否为主机API内容end其他的内容,这里就不说了,太多太杂,还是参考其他mod好了。
要设置一个新的Prefab,假设名字为myprefab,则必须要在mymod/scrpits/prefabs下添加一个文件,文件名写成myprefab.lua 然后在modmain.lua的PrefabFiles表内写入”myprefab” 。在给出这个prefab的注释之前,先说一下基本的概念,每个prefab的的结尾,都有类似这样的语句return Prefab(&common/inventory/spear&, fn, assets)Prefab是系统提供的一个创建预设物的函数,第一个参数,最后一个斜杠后填的是你的prefab的名字,而前面那一段,则建议参考同类prefab来填写,比如说长矛是物品栏物品,就是common/inventory,如果是蜘蛛,是怪物,就是common/monster。 第二个参数fn,则是描述这个prefab的主函数,实际上,一个prefab,不管代码写得多长,最后所有的信息,都要集中到这个fn里来处理。所以如果你想了解一个prefab的信息,直接看这个prefab的fn就可以了。第三个,就是所附加的材质了,就是图片,动画之类的东西。 然后,就拿最简单的长矛来做个示例吧:(原注释来自猪哥,我部分修改) local assets={
Asset(&ANIM&, &anim/spear.zip&),--加载长矛 放在地面状态的 动画
Asset(&ANIM&, &anim/swap_spear.zip&),--加载长矛 拿在手上的动画}local function onfinished(inst)
inst:Remove()--耐久用完后,移除长矛这个物体endlocal function onequip(inst, owner)
owner.AnimState:OverrideSymbol(&swap_object&, &swap_spear&, &swap_spear&)--装备长矛后,持有者的状态 加上长矛的状态,第一个参数是对应持有武器的手的位置,第二个参数是动画的build名称,第三个参数是动画的bank名称
owner.AnimState:Show(&ARM_carry&) --装备长矛后,持有者 持有之手
owner.AnimState:Hide(&ARM_normal&) --装备长矛后,持有者 空闲之手
隐藏 (在动画里,持有手
空闲手 是 在一起的,根据不同的情况 来选择 谁隐藏 谁显示)endlocal function onunequip(inst, owner)
owner.AnimState:Hide(&ARM_carry&) --卸下长矛后,持有者 持有之手
owner.AnimState:Show(&ARM_normal&) ----卸下长矛后,持有者 空闲之手
显示(原理同上)endlocal function fn(Sim)
local inst = CreateEntity()--定义inst这个变量,初始化,创造这个物体,变量名为inst
local trans = inst.entity:AddTransform()--为inst这个实体 增加 Transform 标准组件,Transform负责的是 实体的大小,位置,形状等等。local anim = inst.entity:AddAnimState()--为inst这个实体 增加 AnimState 标准组件, AnimState负责 实体 的 动画效果,颜色滤镜等等。
MakeInventoryPhysics(inst)--这个定义的是inst这个实体 的 物理系统, 这个标准组建参考 scripts/standardcomponents.lua,里面有队友各个Make啥啥啥Physics函数的定义
anim:SetBank(&spear&)--动画效果 的 bank名称,bank就是 动画模板的 轮廓,控制的是 动画中 所有对应像素 的范围和边界(我只能理解到这一步)--本文作者附言:现在新增加的理解是,bank还控制着所有的动画。
anim:SetBuild(&spear&)--动画效果 的 build名称,build就是 动画 的模型,比如长矛的 具体像素分布,即长矛长啥样 (注意,这句话和前一句话指的是 长矛放在地面的状态,拿在手上的状态看前面 装备长矛后 的注释)
anim:PlayAnimation(&idle&)--动画效果初始化,比如长矛出现时 第一眼是什么动画, 就是&idle&这个静止状态,关于动画的话,在data/anim文件夹内有 各种zip文件,需要用ktools转换成spriter可以查看的scml文件,从scml文件的动画列表里就有各种动画状态,比如“idle”就是之一
inst:AddTag(&sharp&)--这个是增加“sharp”标签Tag,关于Tag的应用,是方便其他文件或组件进行不同情况的筛选 的作用。在此&sharp&这个Tag目前 我还不知道是什么作用
nst:AddComponent(&weapon&)--增加 武器 组件,长矛是武器嘛
ponents.weapon:SetDamage(TUNING.SPEAR_DAMAGE)--设置武器攻击力,里面的TUNING是指 在scripts/tuning.lua里定义了 SPEAR_DAMAGE这个常量的数值。
inst:AddComponent(&finiteuses&)--增加 有限耐久 组件,长矛作为武器 是有耐久的嘛
ponents.finiteuses:SetMaxUses(TUNING.SPEAR_USES)--设置 最大耐久
ponents.finiteuses:SetUses(TUNING.SPEAR_USES)--设置 当前耐久,一般情况下,崭新的长矛的 当前耐久=它的最大耐久, 在有些情况 比如彩蛋里或迷宫里的箱子,不一定是满的耐久
ponents.finiteuses:SetOnFinished( onfinished )
--设置 长矛用完的时候该怎么办,看看前面定义的 onfinished函数,就是移除长矛。 很多道具耐久用完就 删除本身,但是 矿工帽和 提灯 就不会,就是因为这个函数定义的不同咯。
inst:AddComponent(&inspectable&)--增加 检阅组件,就是 玩家 检查/查看 长矛,会说对应的 话
inst:AddComponent(&inventoryitem&)
--增加 物品栏物品 组件, 长矛当然可以放在 物品栏或容器里 啦
inst:AddComponent(&equippable&)--增加 可装备 组件,长矛 当然 装备后才能战斗嘛。
ponents.equippable:SetOnEquip( onequip )
--装备 长矛后,调用onequip函数,前面有定义
ponents.equippable:SetOnUnequip( onunequip ) -- 卸下长矛后,调用onunequip函数
return inst --刚开始
local inst = CreateEntity() 这句话只是创建长矛这个物体的开始,通过后面的代码逐渐完善, 直到这句
return inst 就正式说明 长矛这个物体定义完成了!!!endreturn Prefab( &common/inventory/spear&, fn, assets)
-- return inst 之后 并不能 把定义好的 长矛 归为 游戏正规的物品啊,那么 这句话 return Prefab 就是把长矛这个物体 加载完成,fn是定义长矛的主函数,assets是长矛的材质 附言:在联机版中,还需要在fn函数体中加入如下代码inst.entity:AddNetwork() --添加网络变量,如果你想要你的prefab被其他人看到的话必须添加if not TheWorld.ismastersim then --这个判断是否是主机,因为这些信息只在主机上运行计算,计算好之后再把信息传递到客机上。return inst
endinst.entity:SetPristine()--字面意思是设置初始化,具体什么用途我还没搞清楚,但几乎每个联机版的prefab都有这句话。
人物MOD教程的代码代码其实这部分内容,很多人都会用,Klei论坛的教程也写的非常清楚,所以只搬运klei论坛的Dleowolf 的mod示例,有关图片导入,请参考老崔的教程:教程贴内的网盘有人物示例MOD下载。这里只讲解其中部分代码的含义,但要想真正理解,还是需要自己实际动手操作一遍。要创建一个MOD人物,需要设置Modmain.lua和人物的prefab脚本两部分。 Modmain.lua的部分代码PrefabFiles = {--同上面的modmain部分,这里不再多解释&esctemplate&,}Assets = {--同上面的modmain部分,这里不再多解释
Asset( &IMAGE&, &images/saveslot_portraits/esctemplate.tex& ),
Asset( &ATLAS&, &images/saveslot_portraits/esctemplate.xml& ),
Asset( &IMAGE&, &images/selectscreen_portraits/esctemplate.tex& ),
Asset( &ATLAS&, &images/selectscreen_portraits/esctemplate.xml& ),
Asset( &IMAGE&, &images/selectscreen_portraits/esctemplate_silho.tex& ),
Asset( &ATLAS&, &images/selectscreen_portraits/esctemplate_silho.xml& ),
Asset( &IMAGE&, &bigportraits/esctemplate.tex& ),
Asset( &ATLAS&, &bigportraits/esctemplate.xml& ),Asset( &IMAGE&, &images/map_icons/esctemplate.tex& ),Asset( &ATLAS&, &images/map_icons/esctemplate.xml& ),Asset( &IMAGE&, &images/avatars/avatar_esctemplate.tex& ),
Asset( &ATLAS&, &images/avatars/avatar_esctemplate.xml& ),Asset( &IMAGE&, &images/avatars/avatar_ghost_esctemplate.tex& ),
Asset( &ATLAS&, &images/avatars/avatar_ghost_esctemplate.xml& ),}--一些预设置的内容。前面说过了,modmain的运行环境是独立于游戏的,要调用游戏的变量/常量,就需要GLOBAL声明。local require = GLOBAL.requirelocal STRINGS = GLOBAL.STRINGS-- 人物选择界面的字符串STRINGS.CHARACTER_TITLES.esctemplate = &The SampleCharacter& --人物的头衔,就是选择界面头上那一串文字STRINGS.CHARACTER_NAMES.esctemplate = &Esc& --人物的名字STRINGS.CHARACTER_DESCRIPTIONS.esctemplate = &*Perk 1\n*Perk2\n*Perk 3& --人物的描述,\n为换行符号,最多填三行。STRINGS.CHARACTER_QUOTES.esctemplate =&\&Quote\&& --人物的格言 -- 人物的特别话语,就是在检查物品,攻击怪物之类的活动时会说的话。STRINGS.CHARACTERS.ESCTEMPLATE = require&speech_esctemplate&--话语文件的名字,保存在scipts文件夹下。如果没有的话,可以用默认的speech_wilson -- 人物在游戏里的名字,与前面显示在选人界面的不同,这个是在游戏里显示的。STRINGS.NAMES.ESCTEMPLATE = &Esc& -- 其他人点到这个人物时会说的话,根据不同的状态说不同的话。STRINGS.CHARACTERS.GENERIC.DESCRIBE.ESCTEMPLATE ={GENERIC = &It&#39;sEsc!&,ATTACKER = &That Esclooks shifty...&,MURDERER =&Murderer!&,REVIVER = &Esc, friend ofghosts.&,GHOST = &Esc could use aheart.&,} --添加小地图图标AddMinimapAtlas(&images/map_icons/esctemplate.xml&) -- 添加人物到游戏中,第一个是人物的名字,第二个是性别,男为male,女为female,无性可以不填。AddModCharacter(&esctemplate&,&FEMALE&)
人物的Prefab文件部分:local MakePlayerCharacter = require &prefabs/player_common&--读取游戏里创建人物的文件player_common的信息,--需要注意的是,MakePlayerCharacter函数,单机和联机不同,单机只有一个fn,而联机有common_postinit,和master_postinit,前者是说要主机、客机都要执行的,后者是只在主机上执行的。对没有编程基础的人来说,要判断这个是比较困难的,只需要知道,大部分时候,全部写在主机执行的部分是没错的。除了像地图图标之类的,需要客机也接收的信息才会写在客机执行部分。还有某些特殊的情况,比如按键触发的,也需要些在客机执行里,否则客机无法执行按键触发)--MakePlayerCharacter本身是内置了Prefab的,实际上人物创建是也是一个Prefab的创建,但官方把很多常用的内容都打包起来了,我们只需要在官方的基础上添加自己的内容,节约了我们编写代码的时间。local assets = { --一系列的材质文件,注意你自己的文件添加在最下面。
Asset(&ANIM&, &anim/player_basic.zip& ),
Asset(&ANIM&, &anim/player_idles_shiver.zip& ),
Asset(&ANIM&, &anim/player_actions.zip& ),
Asset(&ANIM&, &anim/player_actions_axe.zip& ),
Asset(&ANIM&, &anim/player_actions_pickaxe.zip& ),
Asset(&ANIM&, &anim/player_actions_shovel.zip& ),
Asset(&ANIM&, &anim/player_actions_blowdart.zip& ),
Asset(&ANIM&, &anim/player_actions_eat.zip& ),
Asset(&ANIM&, &anim/player_actions_item.zip& ),
Asset(&ANIM&, &anim/player_actions_uniqueitem.zip& ),
Asset(&ANIM&, &anim/player_actions_bugnet.zip& ),
Asset(&ANIM&, &anim/player_actions_fishing.zip& ),
Asset(&ANIM&, &anim/player_actions_boomerang.zip& ),
Asset(&ANIM&, &anim/player_bush_hat.zip& ),
Asset(&ANIM&, &anim/player_attacks.zip& ),
Asset(&ANIM&, &anim/player_idles.zip& ),
Asset(&ANIM&, &anim/player_rebirth.zip& ),
Asset(&ANIM&, &anim/player_jump.zip& ),
Asset(&ANIM&, &anim/player_amulet_resurrect.zip& ),
Asset(&ANIM&, &anim/player_teleport.zip& ),
Asset(&ANIM&, &anim/wilson_fx.zip& ),
Asset(&ANIM&, &anim/player_one_man_band.zip& ),
Asset( &ANIM&,&anim/shadow_hands.zip& ),
Asset(&SOUND&, &sound/sfx.fsb& ),
Asset(&SOUND&, &sound/wilson.fsb& ),
Asset(&ANIM&, &anim/beard.zip& ),
Asset(&ANIM&, &anim/esctemplate.zip& ),---这就是我们要自己添加的材质,比如说人物的图像以及一些特殊的动画都添加在这下面,上面的部分请不要动。
Asset(&ANIM&, &anim/ghost_esctemplate_build.zip& ),}--在定义这个人物时,会用到的prefab,比如说你想给人物在某些时候添加prefab特效,就需要把那个特效的名字填在这里local prefabs = {} -- 开局物品,注意,如果要给多个同一物品,需要多次填写,同上,需要用逗号隔开。local start_inv = {} -- 当这个人物恢复成人的时候执行这个函数local function onbecamehuman(inst)
--设置人物的移动和跑动速度(在道路上的时候)
ponents.locomotor.walkspeed= 4
ponents.locomotor.runspeed= 6end -- 当读取游戏或者生成这个人物的时候执行这个函数local function onload(inst)
inst:ListenForEvent(&ms_respawnedfromghost&, onbecamehuman) 监听从幽灵状态复活成人的事件,一旦监听到就触发onbecamehuman
if notinst:HasTag(&playerghost&) then
onbecamehuman(inst)
-- 这个函数会在主机和客机上都执行,标签可以添在这里local common_postinit = function(inst)
--添加小地图图标
inst.MiniMapEntity:SetIcon(&esctemplate.tex& )end -- 这个函数只在主机上执行,大多数组件都添加在这里local master_postinit = function(inst)
--选择你的人物的声音(可以选择自己导入的,关于声音的导入请参考klei论坛的教程)
inst.soundsname= &willow&
--如果选择韦伯或者女武神的声音,就需要添加这一条,去掉前面的--
--inst.talker_path_override = &dontstarve_DLC001/characters/&
--设置人物的初始三围
ponents.health:SetMaxHealth(150)
ponents.hunger:SetMax(150)
ponents.sanity:SetMax(200)
--设置伤害系数
bat.damagemultiplier = 1
--设置饥饿倍率
ponents.hunger.hungerrate=1*TUNING.WILSON_HUNGER_RATE
--设置读取存档和新生成人物时执行的函数,用于保存信息等,是中级的内容,此处不讲解。
inst.OnLoad = onload
inst.OnNewSpawn = onloadend--返回MakePlayerCharacter,完成人物创建。return MakePlayerCharacter(&esctemplate&, prefabs, assets, common_postinit,master_postinit, start_inv) 第三章完。
支持,收藏了慢慢学
好厉害    ------为什么选择你的会是区区的我呢?
本来我还想做一个人物MOD,后来看了你的攻略贴之后。特别是函数2字,我整个人都go die了
有什么相关的软件(编程的,制作图片的tex,xml)?
mod教程贴必须顶,另外问问能不能转载,还有,希望你来饥荒mod制作吧
这种帖子多一点就太好了,很多人眼里贴吧就是小学生盖楼扯淡的根据地,然而我觉得获取有用资源的时候还是贴吧高效。支持。
贴吧热议榜
使用签名档&&
保存至快速回贴}

我要回帖

更多关于 饥荒tuning.lua修改版 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信