面向 Garry's Mod 的 Lux

写的是现代 Lux,交付的是普通 GLua。

可以从单文件渐进接入,也可以构建完整 GMod 项目;Lux 负责 package、运行域拆分、生成 loader、source map 和 compiler-owned LSP。

单文件构建可选 autorun loader无 registry packagecompiler LSP
import { arr } from "@lux/std"enum Badge repr number {  Admin = 1,  Alive = 2,  Dead = 3,}fn badgeOf(ply) =  ply?:IsAdmin() then Badge.Admin  else ply?:Alive() then Badge.Alive  else Badge.Deadfn tint(badge) =  match badge {    Badge.Admin => Color(255, 214, 92)    Badge.Alive => Color(84, 236, 166)    _ => Color(170, 178, 190)  }client fn rows(players) =  players    |> arr.filter(%, (ply) => IsValid(ply))    |> arr.map(%, (ply) => {      local badge = badgeOf(ply)      { name = ply?:Nick() ?? "unknown", color = tint(badge) }    })export client { scoreboardRows = rows }
从小处开始可以编译单个文件,也可以递归构建源码目录并保留相对路径,用于渐进式接入 GLua 项目。扩展到完整 addon通过 manifest 构建模块、client/server 运行域、安全相对路径 loader,以及可选 autorun 输出。没有 registry 的 package从明确的 GitHub、URL 或本地来源安装官方和第三方 package set,并用 lockfile 记录解析结果。编辑器和构建使用同一编译器VS Code 扩展启动 luxc lsp,diagnostics、hover、definition、package resolution 和 build 都来自同一版本。