diff options
| author | Shocker <shocker@freakz.ro> | 2011-11-27 00:29:44 +0200 |
|---|---|---|
| committer | Shocker <shocker@freakz.ro> | 2011-11-27 00:29:44 +0200 |
| commit | c1a6e8d7168acee1bfcddf77414479892fdc32d7 (patch) | |
| tree | bc3175d0521fa8cb1910f32fb927c7fe5f3133ac /src | |
| parent | 5b6b8dd5772f842f7524ac2a2468313c642313f0 (diff) | |
Core/Achievements: Implement ACHIEVEMENT_CRITERIA_TYPE_CURRENCY
Diffstat (limited to 'src')
| -rwxr-xr-x | src/server/game/Achievements/AchievementMgr.cpp | 11 | ||||
| -rwxr-xr-x | src/server/game/DataStores/DBCEnums.h | 1 | ||||
| -rwxr-xr-x | src/server/game/DataStores/DBCStructure.h | 7 | ||||
| -rwxr-xr-x | src/server/game/Entities/Player/Player.cpp | 3 |
4 files changed, 22 insertions, 0 deletions
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 448f14874f9..f62985c3426 100755 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -1562,6 +1562,15 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui break; } + case ACHIEVEMENT_CRITERIA_TYPE_CURRENCY: + if (!miscValue1 || !miscValue2) + continue; + if (miscValue1 != achievementCriteria->currencyGain.currency) + continue; + if (int64(miscValue2) < 0) + continue; + SetCriteriaProgress(achievementCriteria, miscValue2, PROGRESS_ACCUMULATE); + break; // std case: not exist in DBC, not triggered in code as result case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_HEALTH: case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_SPELLPOWER: @@ -1731,6 +1740,8 @@ bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achieve return progress->counter >= achievementCriteria->use_lfg.dungeonsComplete; case ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS: return progress->counter >= achievementCriteria->get_killing_blow.killCount; + case ACHIEVEMENT_CRITERIA_TYPE_CURRENCY: + return progress->counter >= achievementCriteria->currencyGain.count; // handle all statistic-only criteria here case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND: case ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP: diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index e9f4fa5ea63..f523f559172 100755 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -126,6 +126,7 @@ enum AchievementCriteriaTypes // you have to complete a daily quest x times in a row ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST_DAILY = 10, ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE = 11, + ACHIEVEMENT_CRITERIA_TYPE_CURRENCY = 12, ACHIEVEMENT_CRITERIA_TYPE_DAMAGE_DONE = 13, ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST = 14, ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND= 15, diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index ae71b24bdcb..03f3f1b1145 100755 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -127,6 +127,13 @@ struct AchievementCriteriaEntry uint32 questCount; // 4 } complete_quests_in_zone; + // ACHIEVEMENT_CRITERIA_TYPE_CURRENCY = 12 + struct + { + uint32 currency; + uint32 count; + } currencyGain; + // ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST = 14 struct { diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 70eb66090af..861fcfb91c6 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -7364,6 +7364,9 @@ void Player::ModifyCurrency(uint32 id, int32 count) // probably excessive checks if (IsInWorld() && !GetSession()->PlayerLoading()) { + if (count > 0) + GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_CURRENCY, id, count); + WorldPacket packet(SMSG_UPDATE_CURRENCY, 12); packet << uint32(id); packet << uint32(weekCap ? (newWeekCount / PLAYER_CURRENCY_PRECISION) : 0); |
