starbound吧 关注:83,351贴子:910,155

Starbound Lua入门教程

只看楼主收藏回复



IP属地:上海1楼2020-05-10 15:40回复
    说在前面
    最近吧主好像对这类东西放开了,所以我开始做些教程吧。现在国内做Mod的还有多少呢,希望能多出一些modder吧。今日开始缓更,首发于B站和steam指南,具体搜索可见。


    IP属地:上海2楼2020-05-10 15:45
    收起回复
      前言部分:
      这是一份starbound lua入门性教程,不定期更新。学习条件: ①你需要至少学过一门编程语言,不是Lua语言也可以比如C语言,但是必须学过任意一门编程语言。如果还没有任何编程基础,建议学一下Lua的基础语法。 ②非常熟悉starbound中各种json文件,可以自己独立的做json的东西,比如常见的items、projectiles,objects、monster等。如果并不了解可以看我另外一个基础的mod教程,那份教程是json入门教程。以上是必备条件,如果不具备这个条件,这个教程很难对你有用。


      IP属地:上海3楼2020-05-10 15:46
      回复
        学习方法: 刚开始入门是比较痛苦的,每一节都有我演示写的东西,你需要自己重新写一遍教程里的演示的这些代码,写的多了慢慢自己就可以独立写东西了,那之后就是多翻文档和游戏资源包。
        starbound官方提供了doc文件,在starbound/doc/lua下,这些文件打开就能看到官方提供的各类Lua函数。


        IP属地:上海4楼2020-05-10 15:49
        回复
          从游戏技术层面来说,比如Starbound,他的底层语言是是C++,lua是一个中间性的脚本语言,可以比较方便的编写逻辑,而json文件则是一个配置。一个实体的运行机制你可以简单的理解为lua或者底层C++读取json配置,获取相关的参数,然后按照编写的逻辑运行。这部分可以了解一下,实际要比说的复杂的多。


          IP属地:上海6楼2020-05-10 15:50
          回复


            IP属地:江西来自Android客户端7楼2020-05-10 16:02
            回复
              果然用默认头像的都是大佬(除了我)


              IP属地:福建8楼2020-05-10 16:26
              回复
                第二篇:Hello Lua
                学习之前,我们先定一个小目标,做一个最简单的科技型mod,按下键盘上的G即可瞬移当前光标的位置。效果如地址演示地址。(贴吧发不了链接可上B站看看)


                IP属地:上海9楼2020-05-10 19:50
                回复
                  为了弄清科技mod怎么写,先来分析一下原版里的dash这个科技。在解包文件中的/tech/dash这个文件夹。实际上dash这个科技也就三个文件。dash.tech是个json文件,你应该比较熟悉了,这个json文件配置的脚本文件就是dash.lua。


                  IP属地:上海10楼2020-05-10 19:51
                  回复


                    IP属地:上海11楼2020-05-10 19:51
                    回复
                      打开dash.lua文件,简单的用notepad++打开即可。这个lua文件有一百来行,对于新手来说读起来还是很困难的,并不需要读懂,这次我们只需要分析lua函数调用规则即可。(为了截图方便有些函数我把他缩进了)


                      IP属地:上海12楼2020-05-10 19:52
                      回复
                        相信你在编写Starbound Json类mod时应该接触过很多东西了,比如items projectiles monster等等,这些我们统一称作实体。Starbound的所有实体的lua脚本都会有init、undate、uninit这三个函数,tech(科技)实体也不例外,dash.lua就有着三个函数。这三个函数是由Starbound脚本引擎自动调用的,分别对应实体初始化,实体更新、实体销毁这三个过程。


                        IP属地:上海13楼2020-05-10 19:52
                        收起回复
                          可能你还是不清楚这三个函数是什么时候被脚本引擎调用的,那么我们来做一个实验就知道了。先来看一下官方提供的一个函数 sb.logInfo,这个函数在官方文档utility.md可以查找到。他的功能呢类似于lua中的print()。作用就是在log文件中打印字符串。


                          IP属地:上海14楼2020-05-10 19:53
                          回复
                            我们尝试直接在dash.lua的init函数中加上这一句。注:这里为了演示方便所以直接改源文件了,下一节我会详情说怎么以MOD形式展现。除此之外为了让改动生效你需要把原来的资源包删除,也就是packed.pak,只留下解包文件。这会让第一次打开游戏变得非常慢可能需要等十来分钟,原因我也不清楚需要耐心等待,可能是Starbound加载这种解完包的文件比较慢,总之这种方式只是为了测试方便。


                            IP属地:上海15楼2020-05-10 19:54
                            回复
                              打开游戏后,我们装上冲刺科技,来看一下log文件,可以看到已经打印出hello lua这个字符串了。



                              IP属地:上海16楼2020-05-10 19:55
                              回复