星露谷物语Farmtronics机器人保姆级教程:手把手教你写自动浇水脚本(附完整代码)
在《星露谷物语》的农场生活中,浇水是最基础却也最耗时的日常任务之一。Farmtronics模组为玩家带来了可编程的机器人助手,让自动化成为可能。本教程专为零基础或编程新手设计,将一步步教你如何编写一个自动浇水脚本,从理解基础概念到实际代码实现,确保你能轻松上手并应用到自己的农场中。
1. 准备工作与环境配置
1.1 安装必要的模组与工具
在开始编写脚本之前,确保你已经正确安装了以下内容:
- Farmtronics模组:这是实现机器人编程的核心模组
- SMAPI:星露谷物语的模组加载器,最新版本为3.16.2或更高
- 文本编辑器:用于编写脚本代码,推荐使用Notepad++或VS Code
注意:安装模组时请确保版本兼容性,避免游戏崩溃或功能异常。
1.2 了解MiniScript基础语法
Farmtronics机器人使用MiniScript语言进行编程,这是一种简单易学的脚本语言。以下是几个关键语法点:
// 这是单行注释 /* 这是多行注释 */ // 变量定义 myVariable = 42 // 函数定义 myFunction = function(param1, param2) // 函数体 end function // 循环结构 for i in range(1,10) print i end for // 条件判断 if x > 10 then print "x大于10" else if x == 10 then print "x等于10" else print "x小于10" end if2. 机器人坐标系与基本操作
2.1 理解笛卡尔坐标系
Farmtronics机器人使用笛卡尔坐标系定位,这意味着:
- X轴:水平方向,向右为正
- Y轴:垂直方向,向上为正
- 原点(0,0):通常位于农场左下角
2.2 机器人方向控制
机器人有四个基本朝向,用数字表示:
| 数值 | 方向 | 英文 |
|---|---|---|
| 0 | 上 | Up |
| 1 | 右 | Right |
| 2 | 下 | Down |
| 3 | 左 | Left |
转向函数示例:
TurnTo = function(Facing) while bot.facing != Facing bot.right end while end function3. 编写自动浇水脚本
3.1 全局参数设置
在脚本开头,我们需要定义一些全局变量:
WaitTime = 0.3 // 机器人动作间隔时间(秒) Line = 3 // 需要浇水的行数 Column = 3 // 需要浇水的列数 WaterSourceX = 72 // 水源X坐标 WaterSourceY = 27 // 水源Y坐标3.2 移动功能实现
机器人需要能够移动到指定位置,这包括直线移动和坐标移动:
// 直线移动函数 bot.moveStraight = function(Facing, Steps) TurnTo(Facing) for i in range(Steps-1) if bot.ahead != null then if bot.ahead.name != "HoeDirt" and bot.ahead.type != "Clump" then bot.clearAhead end if end if bot.forward wait(WaitTime) end for end function // 移动到指定坐标 bot.moveTo = function(ToX, ToY) moveX = ToX - bot.position.x moveY = ToY - bot.position.y // X轴移动 if moveX != 0 then botTurnTo = 1 if moveX < 0 then moveX = -moveX botTurnTo = 3 end if bot.moveStraight(botTurnTo, moveX) end if // Y轴移动 if moveY != 0 then if moveY > 0 then botTurnTo = 2 else moveY = -moveY botTurnTo = 0 end if bot.moveStraight(botTurnTo, moveY) end if end function3.3 浇水功能实现
核心浇水功能需要考虑水壶水量和自动补水:
UseWateringCanAhead = function bot.select "Watering Can" bot.useTool // 检查是否需要补水 if bot.ahead.dry == 1 then StX = bot.position.x StY = bot.position.y // 前往水源 bot.moveTo(WaterSourceX, WaterSourceY) TurnTo(2) // 面向水源 bot.select "Watering Can" bot.useTool // 补水 // 返回继续浇水 bot.moveTo(StX, StY) TurnTo(3) // 面向田地 bot.select "Watering Can" bot.useTool end if bot.forward wait(WaitTime) end function4. 主程序与使用方法
4.1 主浇水函数
这是控制整个浇水流程的核心函数:
WaterMain = function(line, column) // 记录起始位置 WaterOriginX = bot.position.x WaterOriginY = bot.position.y TurnTo(3) // 初始面向左 // 逐行浇水 for c in range(1, column) for l in range(1, line) UseWateringCanAhead end for // 移动到下一行起始位置 bot.moveTo(WaterOriginX, WaterOriginY + c) TurnTo(3) end for // 返回原点 bot.moveTo(WaterOriginX, WaterOriginY) end function4.2 脚本保存与运行
- 将上述所有代码复制到文本编辑器中
- 保存为
.ms文件,例如water.ms - 将文件放入存档目录的
usrdisk文件夹:- Windows路径:
C:\Users\[用户名]\AppData\Roaming\StardewValley\Saves\[存档名]\usrdisk
- Windows路径:
- 游戏中右键点击机器人,输入命令:
load "water.ms" run
5. 常见问题与调试技巧
5.1 机器人卡住不动
可能原因及解决方案:
- 坐标计算错误:检查移动目标坐标是否正确
- 障碍物阻挡:确保路径上没有不可清除的障碍
- 等待时间不足:适当增加
WaitTime值
5.2 浇水不完全
排查步骤:
- 检查水壶是否装备正确
- 确认水源坐标是否正确
- 检查
Line和Column参数是否设置合理
5.3 性能优化建议
- 对于大面积农场,可以考虑分区域浇水
- 优化移动路径,减少不必要的往返
- 适当调整
WaitTime找到最佳平衡点
6. 自定义与扩展
6.1 适应不同农场布局
修改以下参数以适应你的农场:
WaterSourceX和WaterSourceY:指向你的水源位置Line和Column:匹配你的农田规模- 起始位置:调整机器人开始浇水的位置
6.2 添加更多功能
你可以扩展脚本实现更多自动化功能:
- 自动播种
- 自动收获
- 自动整理储物箱
// 示例:自动收获函数 AutoHarvest = function bot.select "Scythe" for i in range(1,10) if bot.ahead.crop != null and bot.ahead.crop.ready then bot.useTool end if bot.forward wait(WaitTime) end for end function在实际使用中,我发现将浇水区域划分为多个小块,每个小块3×3或4×4的大小最为高效。这样既不会让机器人跑太远补水,又能覆盖足够大的面积。另外,定期检查水壶的耐久度也很重要,避免在关键时刻工具损坏。