外观
持续计数与一次发放
配套版本
使用 1.0.0 工具包与配套 Host;本例接口最低要求 Host API 1.8,1.0.0 Host 提供 API 1.9。仅更换工具包不会让旧 Host 获得新能力。
一个 Python 持续任务订阅两个 Lua View,每增加 10 条命令接纳,通过 shop 保存订单并发放一块石头。它演示连续读取、最小授权、持久回执与退出清理;没有余额、价格或扣款,不是完整经济系统。
准备三个 provider
在配套工具包根目录按 examples/tasks/README.md 完整操作。该文件包含本页各步的实际命令;需要 Python 3.10+、同批 SDK、随包 checker、已有游戏连接和真实命令来源。使用目标实例自己的回环管理地址及私有令牌文件,不在源码中保存令牌。
| 安装名与材料 | 配置 | 最小权限 |
|---|---|---|
stats_commands:examples/lua-stats/stats_commands | 保存空对象 {} | event:operation.admitted、service:operation.admitted |
admission_cursor:examples/lua-stats/admission_cursor | 无配置 schema | 同上 |
bus-shop:examples/native-bus/shop/python | 无配置 schema | service:command.execute |
每个目录分别用 runtime-plugins.py pack 和自己的 package.files.json 打包;pack 调用随包 checker 后生成 ZIP。使用 runtime-admin.py 安装、配置、审阅授权,确认就绪再依次启动三个 provider。已有同名安装先检查状态,不直接覆盖。
两个 Lua 模块不提交游戏动作。统计数表示命令接纳数,包括失败或未知结果;游标表示最近实际观察到的 sequence,初始 0 表示尚未观察到,不是全局历史高水位。
运行一个任务
- 复制
examples/tasks/count_buy.py到工作目录,编辑PLAYER。当前示例只接受 1–16 位 ASCII 字母、数字或下划线;使用已授权发放的玩家名。 - 保持
EVERY=10。它必须大于 1,因为每次购买自身的 give 也产生一条命令接纳;不要排除后还称它为全部接纳数。 - 用下面的命令启动,再用同一 CLI 的
status count-buy和logs count-buy --follow查看任务。
sh
python3 runtime-task.py --url "$TARGET_URL" --token-file "$TARGET_TOKEN_FILE" run "$COUNT_BUY_WORK/count_buy.py" \
--name count-buy --timeout 3600 --host-api-minor 8 \
--service stats_commands.count --service admission_cursor.last_sequence --service shop.buy \
--dependency '{"id":"example.nativebusshop","major":1,"min_version":"1.0.0"}'TARGET_URL、TARGET_TOKEN_FILE 与 COUNT_BUY_WORK 按包内 README 先设置。任务只申请三个 service,不继承 shop 的命令权限。shop 硬依赖固定 ID、major 与最低版本;Lua provider 通过目录发现,保留替换后重建观察的能力。
这里显式设置 3600 秒;CLI 默认是 300 秒。MAX_PURCHASES=0 表示持续至取消或超时;首次安装前改成正数,可在足够购买成功后正常返回。取消不会伪造一个正常完成结果。
读数、订单和回执
首次完整快照建立阈值基线。complete=false 时仍展示观察,但不生成新阈值决策或购买请求;新 generation 不证明缺口已修复。Watch 遇 instance_replaced 时关闭旧流,重新发现并打开新基线;其他终止错误使任务退出。
每次先持久保存 workflow ID、阈值步数和完整 pending 请求,再调用 shop。shop 将订单、首次动作意图和原提交回执绑定;重复 business key 查询原订单,不制造新的 give。accepted 只表示已接纳,随后按原订单查询原 operation IDs;succeeded 才推进阈值,failed 或 unknown 保留 pending。
显式恢复同一安装项时,如果保存的请求此前尚未被 shop 接纳,仍可能首次接纳它;所以恢复不是无条件只读。已接纳的原订单只对账,不换 key 自动补单。命令 ACK 不等于玩家背包已独立读回。
停止与保留
先 runtime-task.py ... cancel count-buy,确认任务状态和清理结果,再用 runtime-admin.py ... stop 依次停止 shop 和两个 Lua provider。任务退出会关闭两个 Watch 并等待后台观察任务退出;取消任务不撤销 shop 已接纳的动作。
保留安装身份、Host 数据、pending、订单和原回执。unknown 先核对原证据,不能通过删除数据、换 key 或重新购买消除。无清理错误后仅移除不再需要的本地打包临时目录;不要卸载或删除持久数据来代替停止。