Files
adventureland/docker/patch-drm-check.js
T
2026-10-29 21:13:01 +01:00

40 lines
1.5 KiB
JavaScript

#!/usr/bin/env node
// Local patch for the Adventure Land game server (applied at image build time).
//
// The upstream DRM check in node/server.js (start_character) treats every
// account created after 2019-02-01 as unverified unless it carries a Steam or
// Mac App Store auth id. A self-hosted server cannot issue those ids (Steam
// tickets need the game's private publisher key, and Steam OpenID sign-in needs
// a publisher web API key), so every login gets the "authfail" condition:
// gold/luck -85%, xp -20%.
//
// AL_DRM_CHECK=0 disables the check. Unset or any other value keeps the
// upstream behaviour. The script fails loudly when the upstream line is gone,
// so a code update cannot silently skip the patch.
const fs = require("node:fs");
const file = process.argv[2] || "/app/node/server.js";
const original =
'if (owner.created > new Date(2019, 1, 1) && !gf(owner, "legacy_override")) drm = true;';
const patched =
'if (process.env.AL_DRM_CHECK !== "0" && owner.created > new Date(2019, 1, 1) && !gf(owner, "legacy_override")) drm = true;';
const source = fs.readFileSync(file, "utf8");
if (source.includes(patched)) {
console.log("patch-drm-check: already applied");
process.exit(0);
}
if (source.split(original).length !== 2) {
console.error(
"patch-drm-check: expected exactly one occurrence of the upstream DRM check in " + file,
);
process.exit(1);
}
fs.writeFileSync(file, source.replace(original, patched));
console.log("patch-drm-check: applied to " + file);