The attached plugin should block this as best that can be done. There is no way to tell the differences between the client really earning an achievement and them faking it so rate-limiting is the only way to go.
Three convars are provided:
sm_ach_max_unlocks -
Maximum number of achievements that a player can earn during a map before action is taken (default 10)
sm_ach_rate_limit_max -
Maximum number of achievements that a player can earn in the last sm_ach_rate_limit_time seconds before action is taken (default 4)
sm_ach_rate_limit_time -
Amount of time (in seconds) for achievements to count toward sm_ach_rate_limit_max (default 30)
If any of the three cases are true, the
AchievementBanClient method inside the plugin is called. Right now it only stops future achievement messages from the client until the end of the map (where all of these values reset). Feel free to edit it to make that more persistent or kick/ban them.
- Player "earns" any single achievement more than once
- Player "earns" sm_ach_max_unlocks or more total achievements
- Player "earns" sm_ach_rate_limit_max or more achievements in sm_ach_rate_limit_time seconds