moymo,Docs
Skip to content
Games: the Moymo SDK

Fair play ​

Moymo for Windows

Moymo for Windows reports what it checked from its next release on. Until then, every unlock that comes from the game counts as the game (unchecked).

Achievements and stats are worth something only if they are real. This page says what Moymo checks, what nobody can check on a player's PC, and how your server closes the gap.

The short version ​

  • What the game sends is checked, but a determined cheater controls their own PC, and with it the game and Moymo for Windows.
  • What your server sends cannot be faked by a player. For anything that must be real (rare achievements, rewards, rankings), let only your server set it: set_by = "server" in moymo.toml.
  • Every unlock carries its source, so you and Moymo always know how far to trust it.

Where data comes from ​

SourceMeansWho can fake it
Your serverYour server sent it, with its server key.Only someone who has your server key.
Moymo for WindowsThe game sent it, and Moymo for Windows saw your game running from its install folder at that moment.A player who modifies the game or Moymo for Windows on their own PC.
The gameThe game sent it, and nothing could check it (for example, a game that is not in Moymo's catalogue yet).A player who sends it without the game.

The game's Manifest tab in the Developer Portal shows, for each achievement, how many unlocks came from each source.

What counts. Every unlock shows on the player's profile. When Moymo counts unlocks of games with the Moymo SDK (rarity, Moymo XP), it counts only those from your server and from Moymo for Windows, and none marked suspicious.

What Moymo checks on data from the game ​

  1. The player allowed it. Nothing from a module the player did not allow is accepted.
  2. It is in moymo.toml. Only names in the current moymo.toml of that environment, and values in their ranges. Moymo refuses everything else.
  3. It may come from the game. An achievement or stat with set_by = "server" is refused from the game, every time.
  4. The game was running. An unlock gets the source Moymo for Windows only when Moymo for Windows saw your game's own process running from the game's install folder, and the same PC reports the game being played. Anything less is the game.
  5. At a human pace. At most 30 unlocks a minute for one player and game. A burst (half of the game's achievements, and at least five, within ten minutes) is marked suspicious. It stays on the profile, counts for nothing, and you see it in the portal. When your server unlocks the same achievement, it is no longer suspicious.

Choosing what your server sets ​

set_by goes on an achievement or a stat in moymo.toml:

moymo.toml
toml
[stats.season_wins]
kind   = "counter"
set_by = "server"                 # only your server may set it

[achievements.champion]
name        = { en = "Champion" }
description = { en = "Win ten ranked matches in a season." }
set_by      = "server"
rule        = "stats.season_wins >= 10"
set_byWho may set it
"game" (the default)The game, or your server.
"server"Only your server. Moymo refuses it from the game.

Good candidates for "server":

  • whatever a multiplayer game's server already decides: match results, ranks, rewards;
  • achievements that few players have, or that something real depends on;
  • stats that rules read for those achievements.

Story and exploration achievements in a single-player game can stay "game". If they have no server, nothing better exists for them.

Rules stay on one side. A stat set by your server lives on Moymo; a stat set by the game lives in the game. A rule reads stats of one side only, and moymo check refuses a mix. An achievement set by your server requires only achievements your server sets, so nothing sent from the game can lead to one of yours.

When you find a cheater ​

Your server can take an unlock back, whatever its source: DELETE /players/{player}/achievements/{key} in the Server API. The player's profile and the game's rarity update at once.

Keep your server key secret ​

  • Never put a server key in the game. Anything in a build can be read by anyone who has the build. The key belongs on your server, in its configuration or a secret store, not in your code repository.
  • A leaked key: make a new one in the portal, put it on your server, then Revoke the old one. A revoked key stops working at once.
  • Keys start with mk_live_ or mk_test_ so that secret scanners can find one that slipped into a repository or a log.

See Your game's server for how to set it up.

The wiki is for Moymo's members and developers. Something wrong or missing? Use "Suggest a change" on any page.