Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
api:robot:zh [2023/11/27 04:14]
hfsr [API 特有方法]
api:robot:zh [2023/11/30 08:27]
hfsr [悬停]
Line 3: Line 3:
 此API封装了[[component:​robot:​zh|机器人]]**组件**的功能,允许与机器人实现更直观的互动。 此API封装了[[component:​robot:​zh|机器人]]**组件**的功能,允许与机器人实现更直观的互动。
  
-使用如下方式在的 Lua 代码中调用这个 ​API:+Lua代码中这样写,那么你调用的就是此API:
  
 ```lua ```lua
Line 10: Line 10:
 ``` ```
  
-不推荐直接访问机器人组件API,虽然可以通过组件接口这么做+与之相对的是通过组件接口,直接使用机器人组件API:
  
 ```lua ```lua
 local component = require("​component"​) local component = require("​component"​)
-local robot_component_api = component.robot -- 如果你使用 OpenOS 可以这么写,否则要写 component.proxy(component.list("​robot"​)())+local robot_component_api = component.robot -- 如果你使用OpenOS那么可以这么写,否则要写 component.proxy(component.list("​robot"​)())
 robot_component_api.move(sides.front) robot_component_api.move(sides.front)
 ``` ```
  
-尽管机器人组件提供了更通用的功能,比如说 `move([side:​ number])` ​或者 ​`drop([side:​ number])`,但这个API提供更直观、更安全的功能,比如说 `turnRight``dropDown``forward`。使用哪一种由你自己决定,甚至可以混用二者。+虽然机器人组件提供了更通用的功能,比如`move([side:​ number])``drop([side:​ number])`,但是此API提供更直观、更安全的函数,比如`turnRight``dropDown``forward`。使用哪一种由你自己决定,甚至可以混用二者。
  
-请注意机器人本身就是一台开放式电脑,和其它电脑一样,只是多了一个机器人组件,所以一般的[API](api:​zh)仍然可用。+请注意机器人本身就是一台OC模组的电脑,和其它电脑一样,只是多了一个机器人组件,所以一般的[API](api:​zh)仍然可用。
  
 查看[方块:机器人](:​block:​robot:​zh)以获取更多有关机器人本身的信息。 查看[方块:机器人](:​block:​robot:​zh)以获取更多有关机器人本身的信息。
Line 28: Line 28:
 ## 移动 ## 移动
  
-机器人能够灵活移动,但你应该了解一细节。+机器人能够灵活移动,但你可能会想了解一细节。
  
 ### 悬停 ### 悬停
Line 34: Line 34:
 机器人有飞行高度限制。机器人移动的基本规则是这样的: 机器人有飞行高度限制。机器人移动的基本规则是这样的:
  
-- 1. 机器人只有在起点目标点可用时才会移动(例如用于建桥)。 +- 1. 机器人只有在起点目标点可用(下图绿色区域)时才会移动(此特性可用于建桥)。 
-- 2. 机器人下方一定可用(一定可以向下移动)。 +- 2. 机器人下方位置一定可用(一定可以向下移动)。 
-- 3. 固体方块上至多`flightHeight`格可用(飞行能力有限,默认为8) +- 3. 固体方块(图中棕色区域)方的`flightHeight`格可用区域(飞行能力有限,默认为8) 
-- 4. 任何紧贴实心面的位置都是可用(机器人可以“爬墙”)。  ​+- 4. 紧贴实心面的位置均为可用区域(机器人可以“爬墙”)。  ​
 此处为一张可视化展示上述规则的图片(忽略了第二条规则,这会使图片变得混乱) 此处为一张可视化展示上述规则的图片(忽略了第二条规则,这会使图片变得混乱)
  
Line 170: Line 170:
 \\ \\
 - `robot.use([side:​ number[, sneaky: boolean[, duration: number]]]): boolean[, string]`  ​ - `robot.use([side:​ number[, sneaky: boolean[, duration: number]]]): boolean[, string]`  ​
-尝试以玩家点击右键的方式对着前方使用当前工具栏里工具。   +尝试使用当前工具槽位中物品,与玩家单击右键相同。   
-**side** - 如果给定,机器人只会尝试“右键”指定的面,否则机器人会尝试右键所有可能的。参见 [方向控制(sides) ​API](api:​sides:​zh) ​能的面的列表。 ​  +**side** - 给定,机器人只会尝试“右键单击”指定方向的面,否则机器人会尝试所有可能的方向。参见[sides(方向API](api:​sides:​zh)用方向的列表。 ​  
-**sneaky** - 如果设置为 `true`,机器人会模拟潜行点击右键(如同玩家按住 ​Shift 时点击右键)。某些物品(例如桶)在这时会有不同的行为。 +**sneaky** - 设置为 `true`,机器人会模拟潜行右键单击(如同玩家按住shift时点击右键)。某些物品(例如桶)在这时会有不同的行为。 
-**duration** - 这个物品被使用多长时间。这在使用例如弓之类的蓄力物品时很有用。 ​  +**duration** - 物品被使用多长时间。这在使用例如弓之类的蓄力物品时很有用。 ​  
-**返回值**: 如果机器人可以和它面前的方块或实体互动返回,否则返回。如果成功,第二个返回值会描述机器人和什么东西互动了,它会是“方块*已激活*”“*物品*已放置“和物品*互动*”或者“*物品*已使用”之一。   +**返回值**机器人可以和它面前的方块或实体互动返回`true`,否则返回`false`。如果执行成功,第二个返回值表示机器人和什么东西互动了,可能的取值为下列之一:`block_activated`(激活方块`item_placed`(放置物品)`item_interacted`(与物品互动)、`item_used`(使用物品。 
-这个函数有很广泛的应用,因为机器人能由此模拟右键击大部分物品。玩家唯一的不同在于机器人不能使用要求使者必须是实体的物品,因为机器人是方块。所以喝药水、吃食物或扔末影珍珠会失败。 ​  +函数用途非常广泛,因为机器人可以模拟右键击大多数物品。在这方面机器人与玩家唯一区别是机器人不能使用明确要求用是实体的物品,因为机器人是方块。所以喝药水、吃食物或扔末影珍珠会失败。 ​  
-这个函数的第二个返回值可以被用于右键造成的结果。有物品返回的结果并不总是明显的它们需要事先测试。同样请注意尽管机器人不会被有害药水伤害,它们仍然被爆炸毁,所以使用这个函数放置、扔出或激活任何,请务必小心。可能的第二个返回值是以下这些 + 函数的第二个返回值可判断右键击的结果。有时候不一定能明显看出一个物品返回哪个值因此需要事先测试。还需注意,虽然机器人不有害药水的影响它们可能会被爆炸毁,因此在使用函数放置、投掷或激活任何形式的小心。 ​  
- +第二个返回值的可能取值有:   
-  - `block_activated` - 个方块被激活(例如拉杆、按钮或门)。 +  - `block_activated` - 个方块被激活(例如拉杆、开关以及门)。 
-  - `item_interacted` - 装备的工具与世界互动,例如用剪刀剪羊毛。 +  - `item_interacted` - 装备的工具与世界进行了互动,例如在羊身上使用剪刀。 
-  - `item_placed` - 某些东西被放置世界上了仅仅由可放置的方块造成由可以创造方块或实体的物品造成(例如打火石或刷怪蛋)。 +  - `item_placed` - 某个物品被放置到了世界此返回值一定由可放置的方块触发其他导致方块或实体出现在世界上的物品也会触发(例如石或刷怪蛋。 
-  - `item_used` - 装备的物品被激活,例如喷溅药水。 +  - `item_used` - 装备的物品被激活,例如喷溅药水。 
-  - `air` - 装备的物品要求有一个目标但是却没有。请注意如果你的机器人有一个天使方块升级,这个值永远不会被返回,但一些作仍然不会有效果。 +  - `air` - 当前装备的物品要目标才能使用,并不存在。请注意如果你的机器人有天使升级,此返回永远不会出现,但一些可能仍然效果。\\ 
 +\\
 - `robot.useUp([side:​ number[, sneaky: boolean[, duration: number]]]): boolean[, string]`  ​ - `robot.useUp([side:​ number[, sneaky: boolean[, duration: number]]]): boolean[, string]`  ​
-和 `robot.use()` 一样,只是这个会瞄准机器人头顶的位置+和`robot.use()`一样,但此函数会瞄准机器人上方区域。   
 +\\
 - `robot.useDown([side:​ number[, sneaky: boolean[, duration: number]]]): boolean[, string]`  ​ - `robot.useDown([side:​ number[, sneaky: boolean[, duration: number]]]): boolean[, string]`  ​
-和 `robot.use()` 一样,只是这个会瞄准机器人脚底的位置+和`robot.use()`一样,只是这个会瞄准机器人下方区域。   
 +\\
 - `robot.forward():​ boolean[, string]`  ​ - `robot.forward():​ boolean[, string]`  ​
 尝试将机器人向前移动。  ​ 尝试将机器人向前移动。  ​
-**返回值**:返回 `true`,如果机器人成功移动了,否则返回 `nil`。如果移动失败,第二个返回值会描述为什么失败,它会是“不可能的移动“没有足够能量者是 ​`robot.detect` 返回的障碍描述之一。   +**返回值**机器人成功移动了则返回`true`,否则返回 `nil`。移动失败,会出现第二个返回值,代表为什么失败,可能的取值为:`impossible move`(不可行的移动方式)`not enough energy`(能量不足)`robot.detect`返回值相同的障碍描述。 ​  
-返回值“没有足够能量”是极少见,因为缺少能量通常会让机器人在那之前就关机了。 ​  +返回值`impossible move`很少见,因为缺少能量通常会让机器人在前就关机了。 ​  
-返回值“不可能的移动”是一种回落(fall-back)结果,而且会在诸如机器人试图进入一片未加载区域等场合返回。+返回值`impossible move`是一种回退结果,会在机器人试图进入未加载区域等情况下返回。 ​  
 +\\
 - `robot.back():​ boolean[, string]`  ​ - `robot.back():​ boolean[, string]`  ​
-和 `robot.forward()` 一样,只是这个会让机器人尝试向后移动。+和`robot.forward()`一样,但此函数会让机器人尝试向后移动。 ​  
 +\\
 - `robot.up():​ boolean[, string]`  ​ - `robot.up():​ boolean[, string]`  ​
-和 `robot.forward()` 一样,只是这个会让机器人尝试向上移动。+和`robot.forward()`一样,但此函数会让机器人尝试向上移动。 ​  
 +\\
 - `robot.down():​ boolean[, string]`  ​ - `robot.down():​ boolean[, string]`  ​
-和 `robot.forward()` 一样,只是这个会让机器人尝试向下移动。+和`robot.forward()`一样,但此函数会让机器人尝试向下移动。 ​  
 +\\
 - `robot.turnLeft()`  ​ - `robot.turnLeft()`  ​
-将机器人左转 90°。 ​  +将机器人左转90°。 ​  
-请注意,只会在机器人没有足够能量左转但还没有关机时失败。+请注意,此函数只会在机器人没有足够能量左转但还没有关机时执行失败。 ​  
 +\\
 - `robot.turnRight()`  ​ - `robot.turnRight()`  ​
-和 `robot.turnLeft() ` 一样,只是这个会让机器人右转 90°。+和`robot.turnLeft() `一样,但此函数会让机器人右转90°。 ​  
 +\\
 - `robot.turnAround`  ​ - `robot.turnAround`  ​
-这和调用两次 `robot.turnRight()` 是一样的。+此函数与调用两次`robot.turnRight()`是一样的。 ​  
 +\\
 - <​del>​` robot.level():​ number `</​del>  ​ - <​del>​` robot.level():​ number `</​del>  ​
-**自 OC 1.3 起已弃用。** ​  +**自 OC 1.3 起已弃用。**请使用`component.experience.level()`代替(只能在安装了[[item:​experience_upgrade:​zh|经验升级]]的前提下可用)。 ​  
-译者注:由于该 API 被弃用且暂无恢复计划故略过不译要者请自行查看英文文档+返回机器人的当前等级其小数部分为到达下一等级的百分比进度。例如若此函数返回了`1.5`,代表机器人为1级,且已经完成了升到2级所进度的50%。   
 +\\
 - `robot.tankCount():​ number`  ​ - `robot.tankCount():​ number`  ​
-机器人安装的体储罐数量(number)+机器人安装的体储罐数量。 ​  
 +\\
 - `robot.selectTank(tank)`  ​ - `robot.selectTank(tank)`  ​
-指定的体储罐。这决定了大多数操作在哪个体储罐上进行。+指定的体储罐。这决定了大多数操作在哪个体储罐上进行。 ​  
 +\\
 - `robot.tankLevel([tank:​number]):​ number`  ​ - `robot.tankLevel([tank:​number]):​ number`  ​
-返回指定体储罐的等级如果没有指定,则返回当前液体储罐的等级+返回指定体储罐的流体存量若不指定,则返回选定流体储罐的流体存量。   
 +\\
 - `robot.compareFluidTo(tank:​ number): boolean`  ​ - `robot.compareFluidTo(tank:​ number): boolean`  ​
-测试当前选定的液体储罐中的液体与的液体储罐中的液体是否相同。+检查选定体储罐中的液体与体储罐中的是否相同。 ​  
 +\\
 - `robot.transferFluidTo(tank:​ number[, count: number]): boolean`  ​ - `robot.transferFluidTo(tank:​ number[, count: number]): boolean`  ​
-当前选定的液体储罐转移指定数量的体到的液体储罐。如果不指定数量,就会尝试转移 1000 mB。+从选定体储罐转移指定数量的体到体储罐。不指定数量,尝试转移1000 mB。   
 +\\
 - `robot.compareFluid():​ boolean`  ​ - `robot.compareFluid():​ boolean`  ​
-测试当前选定的液体储罐中的体与机器人面前的液体储罐中的体是否相同。+检查选定体储罐中的体与机器人面前世界中或流体储罐中的体是否相同。 ​  
 +\\
 - `robot.compareFluidUp():​ boolean`  ​ - `robot.compareFluidUp():​ boolean`  ​
-和 `robot.compareFluid()` 一样,只是这个会比较机器人头顶液体储罐+和`robot.compareFluid()`一样,但此函数作用于机器人上方方块。   
 +\\
 - `robot.compareFluidDown():​ boolean`  ​ - `robot.compareFluidDown():​ boolean`  ​
-和 `robot.compareFluid()` 一样,只是这个会比较机器人脚底液体储罐+和`robot.compareFluid()`一样,但此函数作用于机器人下方方块。   
 +\\
 - `robot.drain([count:​ number]): boolean`  ​ - `robot.drain([count:​ number]): boolean`  ​
-从机器人面前的体储罐抽取指定数量的到选定的液体储罐中不指定数量,会尝试转移 1000 mB。抽取的体是直接存在于世界上并且不能被完全储存于选定的液体储罐时,操作失败。没有液体会损失。+从机器人面前的世界中或流体储罐抽取指定数量的体。不指定数量,会尝试转移1000 mB。抽取的体是直接存在于世界中,且不能被完全储存于选定体储罐时,操作失败,但不会损失流体。   
 +\\
 - `robot.drainUp([count:​ number]): boolean`  ​ - `robot.drainUp([count:​ number]): boolean`  ​
-和 `robot.drain()` 一样,只是这个会抽取机器人头顶液体+和`robot.drain()`一样,但此函数作用于机器人上方方块。   
 +\\
 - `robot.drainDown([count:​ number]): boolean`  ​ - `robot.drainDown([count:​ number]): boolean`  ​
-和 `robot.drain()` 一样,只是这个会抽取机器人脚底液体+和`robot.drain()`一样,但此函数作用于机器人下方方块。   
 +\\
 - `robot.fill([count:​ number]): boolean`  ​ - `robot.fill([count:​ number]): boolean`  ​
-从选定的液体储罐中注入指定数量的液体到机器人面前的体储罐。不指定数量,会尝试转移 1000 mB。没有足够的液一个方块或者目标储罐没有足够的空间,操作失败。没有液体会损失。+从选定体储罐抽取指定数量的液体,填充到机器人面前的世界或流体储罐不指定数量,会尝试转移1000 mB。没有足够体填一个方块或者目标储罐空间不足,操作将会失败,但不会损失流体。   
 +\\
 - `robot.fillUp([count:​ number]): boolean`  ​ - `robot.fillUp([count:​ number]): boolean`  ​
-和 `robot.fill()` 一样,只是这个会向机器人头顶注入液体+和`robot.fill()`一样,但此函数作用于机器人上方的方块。   
 +\\
 - `robot.fillDown([count:​ number]): boolean`  ​ - `robot.fillDown([count:​ number]): boolean`  ​
-和 `robot.fill()` 一样,只是这个会向机器人脚底注入液体+和`robot.fill()`一样,但此函数作用于机器人下方的方块。