面向 Garry's Mod 插件开发者
你的 Garry's Mod 插件,只在付过费的服务器上运行。
每个买家都有一个密钥,在服务器端用 GMod 自带的 HTTP 验证。
- 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免费创建账号
- 2连接你的商店
- 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 天未使用的地址会自动释放名额,你也可以随时在许可证页面释放。
SunLicense