一、GM是啥
可以在不更新提交游戏版本同时给玩家发个维护公告、发放游戏奖励补偿。 节日可以给在玩游戏的玩家送上游戏道具
如图:


二、准备工作
1. GitHub 建立仓库
2. 里面建个 gm.json:
{ "notices": [], "rewards": []}
3. 仓库 Settings → Pages → Source 选 Deploy from a branch,Branch 选 main,Save
4. 等几分钟,打开 https://你的用户名.github.io/仓库名称/gm.json 能看到内容就是成功了
三、游戏端代码
进游戏后拉取一次,示例代码如下:
// 地址换成你自己的
var GM_URL = 'https://你的用户名.github.io/wyxx-gm/gm.json';
function fetchGmConfig() {
fetch(GM_URL, { cache: 'no-store'}).then(function (r) { return r.json();}).then(function (cfg) {
if (!cfg) return;
// 1. 公告:没见过的 id 弹窗
(cfg.notices || []).forEach(function (n) {
if (!n ||!n.id) return;
var seen = (Game.state.gmNotices || []).indexOf(n.id) >= 0;
if (!seen || n.force) {
UI.modal({ title: n.title || '公告',
html: '<div>' + n.body + '</div>',
buttons: [{ t: '知道了'}]});
if (!seen) { Game.state.gmNotices.push(n.id); Game.save();}
}
});
// 2. 奖励:转成邮件(同 id 不重复发)
(cfg.rewards || []).forEach(function (rw) {
if (!rw ||!rw.id) return;
Game.sendMail('gm_' + rw.id, rw.title, rw.body, rw.gifts);
});
}).catch(function () {});
// 拉失败静默,游戏不受影响
}
调用时机:进游戏 2 秒后调一次
setTimeout(function () { fetchGmConfig();}, 2000);
四、邮件系统配合
奖励转邮件需要游戏里有邮件系统,核心两个函数
// 发邮件,同 id 不重复
Game.sendMail = function (id, title, body, gifts) {
var mails = Game.state.mails || [];
for (var i = 0; i < mails.length; i++) if (mails[i].id === id) return false;
mails.unshift({ id: id, title: title, body: body,
gifts: gifts || {}, read: false, claimed: false, time: Date.now()});
return true;
};
// 领奖励,防重复
Game.claimMail = function (id) {
var mails = Game.state.mails || [];
for (var i = 0; i < mails.length; i++) {
if (mails[i].id === id) {
if (mails[i].claimed) return { ok: false, msg: '已领取过'};
var g = mails[i].gifts || {};
if (g.lingshi) Game.state.lingshi += g.lingshi;
if (g.xianyu) Game.state.xianyu += g.xianyu;
if (g.mats) for (var k in g.mats)
Game.state.mats[k] = (Game.state.mats[k] || 0) + g.mats[k];
mails[i].claimed = true;
Game.save();
return { ok: true};
}
}
};
五、发公告/奖励
改 gm.json,提交,几分钟生效:
{
"notices": [
{ "id": "n20261003", "title": "维护公告",
"body": "今晚6点维护", "force": true}
],
"rewards": [
{ "id": "r20261003", "title": "补偿", "body": "卡顿补偿",
"gifts": { "lingshi": 5000, "mats": { "灵芝草": 20}}}
]
}
代码里的地址和逻辑按你游戏实际的改改就能用。
记住公告发完记得24小时后删除,不然每次进入游戏都会弹出公告