SunLicense登录
面向 Garry's Mod 插件开发者

你的 Garry's Mod 插件,只在付过费的服务器上运行。

每个买家都有一个密钥,在服务器端用 GMod 自带的 HTTP 验证。

创建免费账号

Free 套餐 · 无需信用卡 · 几分钟完成设置

在用 AI 智能体写代码?粘贴一段提示词
  • Lua
  • Garry's Mod
  • Tebex
  • Stripe
  • Gumroad
  • Payhip
  • Discord
你将获得

为你的销售方式而打造。

一个 Lua 文件

异步、在服务器端、使用 GMod 自带的 HTTP。

sunlicense.lua

每个许可证的服务器数

一台或五台服务器,按 ID 或 IP 计。

TOO_MANY_IPS

吊销或拉黑

一个密钥、一个服务器 IP 或一个 IP 段。

想在哪卖就在哪卖

Tebex、Stripe、Gumroad、Payhip 等。

Discord 买家角色

用购买邮箱认领;吊销即移除。

Sentinel 监视密钥共享

标记在服务器之间来回跳的密钥。

所有套餐
工作原理

在下次发布前上线。

  1. 1免费创建账号
  2. 2连接你的商店
  3. 3地图加载时验证
lua/autorun/server/myaddon_license.lua
local SunLicense = include("myaddon/sunlicense.lua")
local licenseVar = CreateConVar("myaddon_license", "", FCVAR_ARCHIVE + FCVAR_PROTECTED)

hook.Add("InitPostEntity", "MyAddon.License", function()
    local client = SunLicense.new({ baseUrl = "https://api.sunlicense.com", token = MYADDON.ApiKey })
    client:validate(licenseVar:GetString(), { host = MYADDON.ServerId() }, function(ok, status, body)
        if ok then
            MsgC(Color(120, 210, 140), "[MyAddon] License valid, loading\n")
            MYADDON.Start()
        elseif status == 400 then
            MsgC(Color(255, 128, 128), "[MyAddon] License denied: ", body:match('"code":"([%w_]+)"') or "?", "\n")
        else
            MYADDON.Start() -- no answer is not a no: keep running
        end
    end)
end)
常见问题

常见问题解答。

如何保护付费 Garry's Mod 插件不被泄露?

插件以 Lua 形式发布,任何执意的人都能读取和修改验证代码,任何许可证服务都改变不了这一点。每个买家一个密钥能让你掌握主动:你能看到每个密钥被哪些服务器使用,共享或泄露的密钥可以被吊销或将其服务器拉黑,而付费服务器永远不受影响。对验证代码进行混淆会让删除它更费劲。

Lua SDK 能在 Garry's Mod 中使用吗?

能。sunlicense.lua 会识别 Garry's Mod,并用 GMod 的 HTTP 函数异步发送验证,避免服务器卡住。只在服务器端运行它:它使用的 API 密钥只能验证许可证,但不应该出现在发送给玩家的文件里。

哪些商店能自动发放密钥?

Tebex、Stripe、Gumroad、Payhip、Lemon Squeezy、Ko-fi、itch.io、WooCommerce 等平台可直接连接,其中大多数会在退款时吊销密钥。其他渠道可以通过控制台、sunlicense CLI 或 API 发放密钥。

买家更换主机时该怎么办?

买家可以在你的 Discord 中用 My licenses 或在客户门户(Lite 和 Standard)中自行重置旧服务器的设备名额,默认每天一次。设置 IP 限制后,30 天未使用的地址会自动释放名额,你也可以随时在许可证页面释放。

保护你的下一个版本。

  • Free 套餐
  • 无需信用卡
  • 随时可取消