То, что вы делаете, зависит от характера достижения. Если все ваши достижения не соответствуют простому шаблону (соберите X число Y), вам придется до некоторой степени использовать их в специальном случае.
Используя систему обмена сообщениями на основе сообщений, вы можете предоставить ловушки, которые делают локализацию кода особого случая. Вы можете иметь определенные действия, чтобы запускать сообщения для слушателей, которые регистрируют себя. Тогда ваш код / сценарий достижения может просто зарегистрироваться у соответствующих слушателей и выполнить любое необходимое тестирование, чтобы запустить достижение.
У вас будут сообщения о типичных событиях, которые вы, возможно, захотите услышать о достижениях. Такие вещи, как «игрок приобрел предмет X» или «сущность Y убила сущность Z». Таким образом, вы можете отслеживать такие вещи, как количество Z, убитых игроком.
Это, вероятно, лучшее, что вы можете сделать для системы достижений. Он максимально централизует код и возлагает бремя на слушателей для фактического обнаружения достижения.
Кроме того, следует отметить, что для централизованных систем достижений (X-Box Live, достижения Steam) прогресс в достижении обычно хранится на сервере. Таким образом, для накопления достижений («выполнить задачу XY раз»), сценарий достижений просто определяет, когда X был выполнен, и увеличивает счет сервера. Для других видов достижений («выполнить задачу X») серверное достижение является двоичным: либо вы сделали это, либо нет.