您需要跟蹤所有(甚至部分)需要獲得成績的數據。
周邊登錄所取得的成就,你需要每天一次跟蹤每次登錄時,具有類似於表:
user_id | login
1 | 2013-07-20
1 | 2013-07-19
1 | 2013-07-16
2 | 2013-07-20
...
每當觸發跟蹤事件,您還檢查所取得的成就。
event onLogin {
// get the last 4 logins before the current login
statement = (
SELECT login FROM tracking_user_login
WHERE user_id = 1
ORDER BY login DESC
LIMIT 1,4
);
statement.execute();
// did the user even login at least 4 times already?
if (statement.rowCount == 4) {
date lastLogin = todaysLogin;
int consecutiveLogins = 1;
// iterate descending through the last days
foreach (row in statement) {
if (row.login == (lastLogin - 1day)) {
consecutiveLogins++; // increment consecution
lastLogin = (lastLogin - 1day); // prepare next comparison
} else {
// consecution interrupted, ignore the rest
break;
}
}
// enough to achieve something?
if (consecutiveLogins >= 5) {
user.addAchievement('5 CONSECUTIVE LOGINS');
}
}
}
您基本上可以在此活動中添加登錄周圍的所有成就。
爲什麼要在單個度量標準級別跟蹤這類事情?爲什麼不存儲每個登錄時間,然後按某種時間表(或每次登錄等)檢查是否已達到獎勵級別?那麼只需使用關聯表來授予用戶成就? – Brad