编写第一个软件包
这一节我们从一个最小的任务开始:它每隔一秒打印一次计数,数到 5 次后自动退出。 跟着做完,你就掌握了软件包的基本骨架。
1. 创建目录
在助手的 apps/ 目录下新建一个文件夹,名字就是软件包的全名,例如 黑猫@你好世界:
apps/黑猫@你好世界/
2. 编写清单 .hm.json
apps/黑猫@你好世界/.hm.json
{
"名称": "你好世界",
"作者": "黑猫",
"类型": "任务",
"版本": "v1.0",
"简介": "我的第一个软件包",
"仓库地址": "",
"依赖软件包": {}
}
类型 设为 "任务",它才会出现在任务列表里。
3. 编写任务入口 index.lua
apps/黑猫@你好世界/index.lua
-- 每隔 1000 毫秒检查一次
CheckTime = 1000
-- 计数器
local count = 0
-- 返回非 0 表示可以执行 Main
function Check()
return 1
end
function Main()
count = count + 1
GoPrint("你好,世界!第 " .. count .. " 次")
if count >= 5 then
GoPrint("数到 5 了,任务结束")
Exit()
end
end
要点说明:
GoPrint(...)是助手的日志函数,会打印到调试日志里。Check()返回1,表示每次检查都执行Main()。Exit()主动结束任务,避免一直运行。
4. 运行与调试
- 重新打开任务面板,任务列表中应出现「你好世界」。
- 选中它并点击「启动」。
- 打开调试日志,即可看到每秒输出一行、共 5 行后停止。
如果没看到任务:
- 确认
.hm.json是合法 JSON(可用任意 JSON 校验工具)。 - 确认
名称非空、类型是"任务"、隐藏不为true。 - 确认目录位于
apps/下。
5. 让它更有意义:使用基础库
真实任务几乎都会依赖 黑猫@基础库。先声明依赖:
apps/黑猫@你好世界/.hm.json
{
"名称": "你好世界",
"作者": "黑猫",
"类型": "任务",
"版本": "v1.0",
"简介": "我的第一个软件包",
"仓库地址": "",
"依赖软件包": {
"黑猫@基础库": "v1.0"
}
}
然后在 index.lua 中引用它的模块:
local hmPlayer = require("黑猫@基础库.player")
function Main()
local name = hmPlayer.getName()
local pos = hmPlayer.getCurrentPosition()
GoPrint("角色:" .. name .. ",坐标:(" .. pos.x .. ", " .. pos.y .. ")")
Delay(2000)
end
提示
require("黑猫@基础库.player") 中的 黑猫@基础库 是依赖的全名,.player 对应
apps/黑猫@基础库/player.lua。
6. 下一步:加上界面
到目前为止任务没有任何配置界面。要让它可配置,只需增加一个 ui/ 目录,
用声明式的表单描述界面即可。参见 界面(表单)。
备注
如果在编辑器中 require 没有补全、GoPrint 等函数提示未定义,请确认软件包目录下存在
.luarc.json 且指向仓库根目录的 lua_types/,参见目录结构。
下一步:VM 全局函数。