LPAI 独立网页游戏 AI 社区指南

状态与数据

时间、离线、随机与倍速

正确区分游戏帧、现实时间、离线结算、随机来源和运行倍速。

状态与数据 · 时间

先定义时间语义,再选择特殊属性或脚本

“每分钟恢复”“每天刷新”和“离线获得”使用的时钟不同。没有写清时间来源和重复结算规则,最容易产生跨设备漏洞。

# 四种时间问题

需求 关注点
按游戏帧推进 默认运行节奏、暂停和倍速
按现实时间判断 毫秒时间戳、时区、客户端时间可信度
登录后的离线结算 最大离线时长、已自动结算部分、重复登录
临时延迟 tools.delay(callback, ticks),刷新后失效

tools.delay 的单位是游戏帧,不是秒,也不进入存档。长期倒计时必须保存在属性中并由事件或明确操作推进。

# 特殊属性

编辑器可以添加与离线和倍速相关的特殊属性:

  • maxofflinetime:最大自动离线结算时长,按分钟配置。
  • realofflinetime:扣除自动离线运行后剩余的真实离线时长。
  • acctime:运行倍速;默认节奏约为每秒 5 帧,倍速会提高单位现实时间内的游戏帧数。
  • 当前时间类特殊值:以毫秒表示现实时间,用于时间窗口判断。

让 AI 使用特殊属性前,应先调用项目能力查询或添加入口,不能假设项目已经存在同名资源。

# 离线结算契约

离线收益:每 60 秒获得 1 木材。
最多自动结算 8 小时。
超过部分记录为真实离线时间,只用于一次登录奖励。
领取后写入已处理时间,重复进入不能再次领取。
倍速不影响现实时间活动截止时间。

离线重放期间会跳过不适合重复执行的异步调用。不要在离线循环中发送 AI、弱联网、聊天、云存档或客户端特效请求。

# 随机规则

帧随机值可以在一个帧周期内保持结果,纯随机值每次读取都可能变化。无论使用哪种方式,都要把“抽一次”与“显示结果”分开:先在行为脚本中抽取并保存结果,再由页面读取。不要在渲染脚本或动态字符串脚本里反复随机,否则一次页面刷新就会改变结果。

随机奖励还应定义:

  • 概率还是权重。
  • 空奖是否允许。
  • 结果数量上下限。
  • 是否需要保底或去重。
  • 失败、重试和快速点击是否会重复抽取。

客户端随机不能作为付费、安全或反作弊校验的唯一依据。

# 现实时间边界

涉及每日奖励、活动截止和冷却时,明确时区和权威时间来源。客户端当前时间可以被修改,不适合高价值结算;平台活动与付费应使用后端能力。

# 两种模式各自怎样实现

工作项 纯 AI 模式 传统模式
定义时钟 在任务合同中写清秒/帧/现实时间、时区和权威来源 选择并记录准确的特殊/普通属性与事件字段
在线周期 要求 AI 保留唯一结算所有者并查询现有规则 检查自动增长、事件和脚本是否重复
离线补算 要求上限、已处理标记和排除的异步工作 手动配置离线字段并验证事件/脚本重放
随机结果 要求动作时只随机一次并保存结果 把随机放在所属动作脚本,不能放展示字段
验证 让 AI 生成边界样例,再由作者执行 为每个边界制作测试存档并检查前后状态

两种模式必须产出同一份运行时合同。切换工作台不能引入第二套时钟、第二条离线奖励路径或渲染时随机。

# 验收

  • 正常在线、短离线、超过上限离线都得到预期结果。
  • 同一存档重复打开不会再次领取已结算收益。
  • 倍速只影响游戏帧系统,不改变现实活动截止时间。
  • 页面重复渲染不会重新随机。
  • 异步能力不会在离线重放中批量触发。
  • 客户端时间前后调整时,高价值奖励没有可利用路径。

继续阅读:事件系统脚本挂载点