I really enjoyed the solution provided here for groundwork on writing an achievement framework. The problem I have is I have game designers that would like to be able to insert achievements into a CMS at runtime. In a way, it sounds insane and complex to do this, but is it really? I think the concept of having to do a hard push of the application for every new achievement is cumbersome. I would love to be able to give our designers the capability to put together new achievements by entering them into a database. It shouldn't matter what tool I'm using, but for those interested, my backend is being written in JRuby (Ruby on top of the JVM). What are some possible ways of going about abstracting the logic in the aforementioned link even further so that rules can be interpreted at runtime?
Break it down into concrete systems, an achievement is abstract, but an achievement to gather/do/kill/rescue/stalk X amount of T can be represented as an instance of an achievement with a predicate.
So essentially any achievement could be represented by a function, and a set of attributes.
If you want to enable arbitrary achievements you're talking about scripting in some form; represented as an AST or a runtime language, which is a major over kill IMO, as it introduces unnecessary complexity.
Instead of hardcoding rules in the game, just hardcore metrics recording, statistics.
The achievements are only values of statistics that have to be matched to generate a "reward", or preferably, they are remarkable statistics.
So what you need is only recording actions and events that are important in your game and then think later about what to make an achievement about.
Then have a way to setup rules applied to those statistics, to trigger the achievements. Maybe some scripts to call sometimes, that would do the checks, or maybe a simple rule system where you set boundaries of specific statistics to be matched to trigger the achievement.