桌游模拟器(TTS)Lua脚本编写入门

您所在的位置:网站首页 桌游模拟器读取慢 桌游模拟器(TTS)Lua脚本编写入门

桌游模拟器(TTS)Lua脚本编写入门

2024-07-12 07:00:45| 来源: 网络整理| 查看: 265

这篇专栏是个人在尝试学习编写TTS中Lua脚本时阅读的在官方资料站提供的一篇Steam社区的新手指南的个人翻译,希望能给一些希望开始学习TTS中Lua脚本编写的朋友们提供一点便利。里面涉及到一些特别基础的Lua知识和应该如何和TTS进行配合。

写在前面的一些事:

所有代码相关的关键词均为蓝色加粗字体。

原文在很多地方给出了一些其他文章的链接,所有的文章都是英文的,而且B站专栏不方便贴链接,我这里就都省略了。一些关键的可能会在日后翻译一下,到时候会尝试更新到这篇专栏里。

链接绝大部分是Steam社区里的,没有特殊方法的话大概率打不开,但是如果有朋友想要的话,可以在评论区留言。

本篇专栏为个人翻译,在语言和措辞上无法避免会有些疏漏,不过作为基础指南应该够用了。如果在操作中或者阅读中遇到什么问题也可以直接在评论区里留言。

简        介

这篇指南适用于几乎没有Lua编程经验的朋友。本篇指南将包含关于如何格式化代码的基础知识,一些你写脚本需要的基石和提供一些实例。本篇指南建议边看边做,在开始阅读前先打开你的桌游模拟器和Lua编辑器然后跟着这篇指南进行实操。

这篇文章是系列里的第一篇。第二篇是进一步学习Lua(up会之后进行翻译,写完之后会把这里改为相应的专栏链接)。第三篇是一个实用function(函数)的集合(这个不一定会翻译了,看情况)。

在开始首次编写之前

首先,我们强烈推荐你先下载Atom用于编写TTS的脚本。Atom中有提供一个官方插件,提供代码高亮,自动补全,从TTS导入/导出脚本等功能。

之后你最好收藏官方的Lua脚本说明文档,其中包含了TTS定义的所有的function和他们的作用,在你开始写脚本之后会经常用到。

前期准备

TTS中每次你保存脚本的时候,都会使用你最新的存档。所以对于每个你准备开始写的脚本,都需要先完成如下步骤:

按照你想要的样子设置好游戏桌面

保存这个桌子

读取这个桌子

简单练习

作为简单的练习,先打开一个空桌子然后生成两个物体(如图中一共红色正方体和一个蓝色长方体)和一个红色标记。

记得要保存/读取,然后在Atom中或游戏中选择 Mod > 脚本 开始编写。

1) Global.lua

Global.lua是一个作为存档的一部分的脚本文件。本教程在绝大部分时候都是在编写或修改这个文件。每个新存档中的Global.lua都有一点预置的内容,可以直接删掉,我们并不需要他们。

初始Global.lua文件的内容

2) Functions(函数)

函数是可被触发的代码组。有些函数已经内置在脚本系统之中了(例如onload()),其他的可以由用户来创建。每个函数都是由关键词function为开头,并以关键词end为结尾。

一个常见的内置函数就是onload()。这个函数在每次加载脚本的时候都会被触发(如点击撤回/重做)。所以我们可以用他来激活我们将要创建的函数。函数名应当以小写字母开头,并且不能包含空格。我们采用如下的示例函数名。

现在,每次这个脚本被加载的时候,都会运行一个名为exampleFunction的函数。但我们还没有编写这个函数!所以我们现在来编写这个函数,直接跟在onload()函数结束之后。

其中的命令print()也是一个函数。但是不用于触发一段Lua代码,这个函数会激活桌游模拟器内部的一些程序来达到想要的效果。在这个示例中,即为在房间的聊天频道输出一段文字。

这段文字被称为一个string(字符串),并且永远都要被引号(*译者注:必须是英文(半角)引号,单引号或双引号均可)扩起来,以表示该段文字为字符串。字符串即为一系列字符的组合。(如:"这是一个字符串","就是这样!")在点击保存并启动后,在聊天区会显示"Hello, World."

额外知识:在你编写你自己的函数的时候,你可以传递变量给使用的函数。我们这个示例函数的另一个写法是

我们创建了一个变量passedString来代传递过来的字符串,然后输出passedString中储存的字符串。

Objects(对象/物体)

对象是真实存在于桌游模拟器中的任何物体。对于我们的例子来说,就是两个立方体和一个标记(真的是搞了个麻烦的游戏)我们可以用脚本来控制游戏中的物体进行移动,为他们增加按钮或者执行其他各种操作。我们将重新开始编写Global.lua,清空里面所有的文字。

object的用法示例GUIDs

关于效果和对象,我们首先必须能够在Lua中识别到模拟器中的物体。有多种方法可以达到这个目的,如识别到正在被用户抓起的物体或放下的物体,在脚本定义的区域中寻找等。我们将用物体的GUID来识别物体。

GUID是每个物体在模拟器中生成出来的时候被赋予的一个独一无二的标识。即便是两个完全相同的物体,也拥有不同的GUID。在模拟器中,右键点击某物体,点击脚本,点击出现的GUID就可以直接拷贝到剪贴板。GUID永远是字符串,所以使用的时候永远要用引号扩起来。我们来用我们的物体的GUID来创建几个变量

注意:你们的GUID和我的会不同。

在脚本中定义物体

之后,利用onload(),这样就能在脚本被加载的时候就可以进行定义了,我们将用变量来代表真是的物体。所有我们定义的变量名都必须以小写字母开头并且不可以包含空格,除此之外你就可以随意定义你的变量名字了,不过最好让名字明确的告诉读者它代表了什么物体。我将用object1, object2 和 checker来指代我的物体。我们将使用getObjectFromGUID(string)来识别物体,将GUID放在string的位置。

编辑物体

现在开始我们要对物体进行一些编辑。首先我们先给他们取上名字。在onload()中,在我们定义完物体之后,我们可以用setName(string)来命名物体。请注意setName和其他所有属于物体的函数,都必须与物体绑定。否则脚本将无法得知为那个物体命名。括号中的string即为我们想为物体取的名字。

额外知识:你可能会好奇我们为什么不直接把GUID放在getObject里(如:object1 = getObjectFromGUID('195868')。没错,我们是可以这么做的。这个例子的目的是想你展示在有些时候,我们提前定义好变量可以为以后重复使用这些内容提供方便。如果这个GUID需要更改,你就不需要在整个脚本里到处寻找这段字符串然后挨个改了。

如果你想的话,比如对于标记,你完全可以这么写

但是我之所以不建议新手这么写一方面是处于代码的美观角度,另一方面是处于代码可读性的角度。这样写既不利于他人读懂你的代码,而且在代码越来越复杂之后,你也将很难看懂到底写了什么。也会让在以后改进你的代码的工作变得繁重。

4) Buttons(按钮)

我们有很多方法去激活一个函数,但是对于玩家来说,按钮往往是一个很方便的选择。所有按钮必须依托于物体,并且由参数们定义。我们将为标记添加一个按钮,所有可选参数都在官方知识库中的Object页中列出。很多都是可选参数,罗列如下:

click_function = String -- 在点下该按钮时,需要激活的函数的名字

function_owner = Object -- 指定按下按钮时需要激活的函数的位置(global或是在一个物体的脚本中)

labels = String -- 这个按钮的名字

position = Table -- 希望按钮出现的位置相对于物体中心的X,Y和Z坐标

rotation = Table -- 相对于物体的,俯仰,横摇和偏航,用度数表示

width = Number -- 相对于物体的宽度,按钮的宽度

height = Number -- 相对于物体的高度,按钮的高度

font_size = Number -- 相对于物体的大小,按钮字体的大小。

关于按钮的示例Tables(表)

表在Lua中即为一系列量的集合。你可以在表中储存几乎任何变量,并且在之后进行使用。所有的表都是由大括号{}表示的。你可以用名字或者序号来引用表中的变量(Lua中的序号是从1开始数起的)。我们将在定义好GUID后建立一个表来储存后面createButton(table)会用到的参数。我们为这个表选择的名字是button_paramiters

现在我们有了一个包含所有参数的表。我们就可以用它作为参数,使用物体的createButton(table)函数来创建按钮。把这段代码放在onload()的最后,在关键词end之前。

检查一下目前为止的成果

点击保存并启动。你现在应该能看到有一个按钮飘在标识上面几毫米的位置上。如果你没有看到按钮,并且没有收到错误提示,试着把标识翻过来看看,也许标识上下颠倒了导致按钮在桌子里!如果你确实需要把标识翻过来,记得在那之后保存存档,以确保存档里标识的方向时正确的。

添加按钮函数

现在我们要为我们的代码添加一个函数。让它输出一段文字用于测试。我们可以把这个用户定义的函数放在脚本的末尾。

在点击保存并启动之后,点击每次点击我们创建的按钮是,都应该出现这段话。

一时点它一时爽

多点几次,应该你肯定会想一直点的。

一直点它一直爽

额外知识:在你想创建一个表的时候,可以有几种不同的方法。我们用的方法是为了看起来更清晰,但是在实际应用中,如果需要创建很多按钮的话,会占用非常多的空间。我个人比较喜欢用这种节省空间,但是又不会写成超长一行超出屏幕的方式。还是用刚才的例子,我会写成这样

额外知识:到这个节点,非常适合去随意练习一下目前学过的东西了。去官方知识库的Object页,随便试试里面的函数。移动物体的位置,方向,改变颜色,等等操作。

额外知识:再说一句,每次按按钮的时候,它的click_function都会带入两个参数。第一个是它所附着的物体的引用。第二个是一个字符串形式表示的颜色(如"Blue")代表点按它的玩家。

5) 逻辑语句

逻辑语句一般也被叫做if语句。它们用来告诉你的代码,基于一些给定的情形,你希望它们做什么事情。当语句被激活的时候(比如点击什么按钮之类的)其中包含的代码只有条件满足的时候才会被执行。永远是如下形式的

你还可以添加"else",这样在条件不满足的时候去执行一些不同的事情。注意这里我用--作为文本的开头,程序会无视所有--开头的文字。

放在“条件”位置的被称为“关系或条件表达式”。你可以用它来比较任何两者,会产生布尔值作为结果(布尔值即只有,真(true),假(false),两种值的变量类型)

可选的比较运算和逻辑运算符(原文没有这段,原文是一个链接,我把其中重要的东西简单列在这里方便学习):

等于,运算符两侧相等的话为真:==

不等于,运算符两侧不相等的话为真:~=

小于,运算符左侧小于右侧的话为真:

大于等于,运算符左侧大于等于(即不小于)右侧的话为真:>=

小于等于,运算符左侧小于等于(即不大于)右侧的话为真:



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭