模组介绍:【星露谷物语】你想要一群可爱可编程的工作机器人吗?Farmtronics模组介绍_哔哩哔哩_bilibili
参考文档
Farmtronics使用的编程语言语法 MiniScript-QuickRef.pages
Api 接口参考 ·乔斯特劳特/法姆电子学维基 ·吉特哈布 (github.com)
使用版本
Farmtronics.zip-10634-1-2-0-1658871311
SMAPI 3.16.2
一些笔记
1.机器人使用笛卡尔坐标系
2.玩家最好不要站在机器人行动的路径上
3.机器人面对的方向(bot.facing) 0为up 1为right 2为down 3为left
4.机器人模组里面一些名称(Name)
Hoe锄头 Pickaxe十字镐 Scythe镰刀 Axe斧头 Watering Can喷壶
Weeds纤维(杂草) Twig木头 Stone石头
5.type:Clump为大石头和大树桩 其中Name:Boulder为石头 Name:Stump为大树桩
使用clearAhead及clearAndMove时 如果工具不能破开这些障碍物 机器人会一直使用工具尝试破坏
6.如果前面的地类型为"HoeDirt"(就是耕过的地)
使用clearAhead及clearAndMove时会用锄头把这片地清掉(无论是否有作物)
因此可以用bot.ahead.Crop == null 判断是否有作物
7.脚本一般保存在 C:\Users\用户名\AppData\Roaming\StardewValley\Saves\存档\usrdisk(即为新手教程toDo中的usr路径)此处的用户名和存档是实际名字
话不多说 上代码
我的代码包含了按行列浇水 自动补充喷壶 自动归位的功能 但是有些地方还需要优化(随缘吧)
这里是全局参数
WaitTime为机器人前进一步后等待的时间(需要让电脑反应过来 否则下一步会前进不了)
Line和Column为需要浇水的行数和列数 你可以自由设置
WaitTime = 0.3
Line = 3
Column = 3
转向函数 使机器人转到某个方向 Facing为方向(类型为整型) 对应本文章-->一些笔记3.
TurnTo = function(Facing)
while bot.facing != Facing
bot.right
end while
end function
直线寻路 判断障碍是否存在并清除 Facing为面对的方向 Steps为移动的距离
第一行的bot.可以不用加 不过我的代码里面加了我就懒得改了
还有一些寻路的部分没写(随缘补充)
bot.moveStraight= function(Facing, Steps)
//先转向
TurnTo(Facing)
for i in range(Steps-1)
//清除障碍 需要考虑大树桩和大石头这些大障碍 还有水池(type:Property) 水池的判断没有写
if bot.ahead != null then
//如果前面不为耕过的地(有的话bot.clearAhead也会一起清除)且不为大障碍
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
移动至目标位置 ToX为X的目标坐标 Y坐标同理
bot.position.x为获取当前的x坐标
bot.moveTo = function(ToX,ToY)
moveX = ToX - bot.position.x
moveY = ToY - bot.position.y
botTurnTo = 1
//X轴面对的方向
if moveX < 0 then
moveX=-moveX
botTurnTo = 3
end if
//在X轴移动
if moveX !=0 then
bot.moveStraight(botTurnTo, moveX)
end if
//Y轴面对的方向
if moveY > 0 then
botTurnTo = 2
else if moveY < 0 then
moveY = -moveY
botTurnTo = 0
end if
//Y轴移动
if moveY !=0 then
bot.moveStraight(botTurnTo, moveY)
end if
end function
使用水壶并往前移动一格
判断水壶是否为空 可以使用bot.inventory[index].waterLeft
这里index为水壶的序号 可以用bot.inventory[index].Name=="Watering Can"获得index
这里装水的位置(72,27)为图中红圈 你可以自由设置
文章来源地址https://www.toymoban.com/news/detail-488876.html
UseWateringCanAhead = function
bot.select "Watering Can"
bot.useTool
//这里为判断浇水后此地是否干燥
if bot.ahead.dry ==1 then
StX = bot.position.x
StY = bot.position.y
//在72,27装水
bot.moveTo(72,27)
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 function
浇水主函数
浇水的起始位置我设为白圈处 即田地最右上角的那块地的右一格
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 function
最后别忘了运行函数
WaterMain(Line,Column)
程序使用方法
1.将上述代码按文章顺序复制 用记事本之类的软件打开 保存为.ms文件
2.将这个.ms文件放置在 本文章的一些笔记-->7. 所说的usr路径里面
3.右击机器人 输入代码
load "文件名"
run
这里我将文件保存为"water.ms"
文章来源:https://www.toymoban.com/news/detail-488876.html
到了这里,关于星露谷物语(Stardew Valley)Mod Farmtronics 机器人自动浇水代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!