跳到正文

守望先锋地图工坊 · OverPy

写地图工坊,​心里有数。

服务器负载的隐患在哪,不用再靠猜。Wright 静态分析地图工坊和 OverPy 代码,把每个问题指到具体一行。

curl -fsSL https://install.wrightkit.dev/wright/install.sh | bash
终端
$ wright lint rules.txtWARN lint  1 warning, 1 info findingLint findings  warning[min-wait-loop]: loop body waits at the workshop minimum rate; the loop runs at maximum frequency    --> rules.txt:31:3    | 31 |     While(Is Alive(Event Player));    |    |     ^    = evidence: static-indicator  info[expensive-loop-check]: geometry predicate evaluated inside a loop body may be expensive per iteration    --> rules.txt:51:7    | 51 |       If(Is In Line of Sight(Event Player, Vector(0, 0, 0), Barriers Do Not Block LOS));    |    |          ^    = evidence: heuristic  1 file affectedNext  wright lint --fix  wright analyze  wright inspect cost

复制,保存,检查。

  1. 1

    从游戏复制

    像平时分享代码那样,复制规则或整套设置。

  2. 2

    粘贴成文件

    存成文本文件,比如 rules.txt。中英文客户端的代码都可以。

  3. 3

    运行 Wright

    每条结果都指向文件里的具体行。改好后粘回游戏。

    wright lint rules.txt

能查出什么。

  • 写错名字

    动作或值的名字写错了,粘回游戏前就能发现。

    治愈(事件玩家, 空, 10);

    error[unknown-action]: unknown action spelling '治愈' for locale 'zh-cn' (did you mean '治疗'?)

  • 没有等待的 While

    循环一直不停,容易让服务器过载。

    While(存活(事件玩家));
    	治疗(事件玩家, 空, 10);
    End;

    warning[while-without-wait]: loop body contains no wait call and the loop's boundedness is unknown (data-dependent condition with no static counter pattern), so the loop may repeat without yielding

  • 只等 0.016 秒

    循环会以游戏允许的最快速度运行。

    While(存活(事件玩家));
    	等待(0.016, 无视条件);
    	治疗(事件玩家, 空, 10);
    End;

    warning[min-wait-loop]: loop body waits at the workshop minimum rate; the loop runs at maximum frequency

  • 循环里做视线检测

    每一轮都算一次几何检测,开销可能很大。

    While(存活(事件玩家));
    	等待(0.25, 无视条件);
    	If(在视线内(事件玩家, 矢量(0, 0, 0), 屏障不会阻挡视线));
    		治疗(事件玩家, 空, 10);
    	End;
    End;

    info[expensive-loop-check]: geometry predicate evaluated inside a loop body may be expensive per iteration

更多工具。

  • 分析

    元素开销、最复杂的规则、服务器负载隐患,以及被最多规则共用的变量。每条结果都标明是精确值、静态推断还是经验估计。

    wright analyze
  • 结构

    查询规则、符号、引用、控制流和调用关系。inspect cost 列出每条规则的元素开销,并和上一次运行对比。

    wright inspect
  • 修改先校验

    重命名变量或子程序,或用 lint --fix 应用修复。Wright 先给出校验过的 diff,加 --write 才写入。

    wright rename
  • 查名字

    从相近的拼写查到动作或值的准确名称和签名,地图工坊和 OverPy 都能查。

    wright lookup
  • 编辑器

    在支持语言服务器的编辑器里边写边报错。地图工坊文件支持悬停提示、跳转到定义和查找引用;OverPy 文件支持跳转和重命名。VS Code 扩展暂时还没有。

    wright-lsp
  • CI

    在 GitHub Actions 中运行,问题直接标在 PR 上。

    wright lint

地图工坊、OverPy 和 OSTW。

  • 地图工坊

    已支持

    完整支持原生语法,英文和简体中文客户端的代码都能直接检查。

    workshop-rs
  • OverPy

    部分支持

    照常写 .opy。Wright 负责检查、lint、分析和重命名,并编译成地图工坊代码,结果以原版 OverPy 编译器为准。

    opy-rs
  • OSTW

    已暂停

    deltin-rs 能解析和类型检查 OSTW,但功能开发已暂停,Wright 暂不支持。

    deltin-rs

AI 编程助手,​也能用。

  • JSON 输出

    任何命令加上 --format json。统一格式,带版本号。

  • 固定编号

    诊断编号、规则 ID 和退出码固定不变,助手可以放心判断。

  • Agent 指南与 MCP

    wright agent install 把 Wright 指南装进项目;加上 --mcp claude、cursor 或 vscode,同时注册 MCP 服务器。

即将推出
  • 从需求到改动

获取 Wright。

一次安装,wright 和 wright-lsp 都有。

Homebrew

Apple 芯片与 Intel
brew install wrightkit/tap/wright

安装已发布的 wright 和 wright-lsp 可执行文件。

安装脚本

curl -fsSL https://install.wrightkit.dev/wright/install.sh | bash

各平台的发布包和校验和都在 GitHub Releases 页面。