aboutsummaryrefslogtreecommitdiff
path: root/src/game/AchievementMgr.cpp
diff options
context:
space:
mode:
authormegamage <none@none>2009-02-06 15:40:48 -0600
committermegamage <none@none>2009-02-06 15:40:48 -0600
commitf08e9d323b91720fa46382d9f7c6670ae9afb129 (patch)
tree31e647e33e80f9edf5b26f13d75b6b52510a041d /src/game/AchievementMgr.cpp
parente920c9d1abb165f533dc9563a27e342cc93e100d (diff)
[7235] New command: .reset achievements. Author: VladimirMangos
--HG-- branch : trunk
Diffstat (limited to 'src/game/AchievementMgr.cpp')
-rw-r--r--src/game/AchievementMgr.cpp36
1 files changed, 34 insertions, 2 deletions
diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp
index f0a88bee05a..5d69a6c23c3 100644
--- a/src/game/AchievementMgr.cpp
+++ b/src/game/AchievementMgr.cpp
@@ -92,6 +92,38 @@ AchievementMgr::~AchievementMgr()
{
}
+void AchievementMgr::Reset()
+{
+ for(CompletedAchievementMap::iterator iter = m_completedAchievements.begin(); iter!=m_completedAchievements.end(); ++iter)
+ {
+ WorldPacket data(SMSG_ACHIEVEMENT_DELETED,4);
+ data << uint32(iter->first);
+ m_player->SendDirectMessage(&data);
+ }
+
+ for(CriteriaProgressMap::iterator iter = m_criteriaProgress.begin(); iter!=m_criteriaProgress.end(); ++iter)
+ {
+ WorldPacket data(SMSG_CRITERIA_DELETED,4);
+ data << uint32(iter->first);
+ m_player->SendDirectMessage(&data);
+ }
+
+ m_completedAchievements.clear();
+ m_criteriaProgress.clear();
+ DeleteFromDB(m_player->GetGUIDLow());
+
+ // re-fill data
+ CheckAllAchievementCriteria();
+}
+
+void AchievementMgr::DeleteFromDB(uint32 lowguid)
+{
+ CharacterDatabase.BeginTransaction ();
+ CharacterDatabase.PExecute("DELETE FROM character_achievement WHERE guid = %u",lowguid);
+ CharacterDatabase.PExecute("DELETE FROM character_achievement_progress WHERE guid = %u",lowguid);
+ CharacterDatabase.CommitTransaction ();
+}
+
void AchievementMgr::SaveToDB()
{
if(!m_completedAchievements.empty())
@@ -99,7 +131,7 @@ void AchievementMgr::SaveToDB()
bool need_execute = false;
std::ostringstream ssdel;
std::ostringstream ssins;
- for(CompletedAchievementMap::iterator iter = m_completedAchievements.begin(); iter!=m_completedAchievements.end(); iter++)
+ for(CompletedAchievementMap::iterator iter = m_completedAchievements.begin(); iter!=m_completedAchievements.end(); ++iter)
{
if(!iter->second.changed)
continue;
@@ -314,7 +346,7 @@ void AchievementMgr::SendCriteriaUpdate(uint32 id, CriteriaProgress const* progr
void AchievementMgr::CheckAllAchievementCriteria()
{
// suppress sending packets
- for(uint32 i=0; i<ACHIEVEMENT_CRITERIA_TYPE_TOTAL; i++)
+ for(uint32 i=0; i<ACHIEVEMENT_CRITERIA_TYPE_TOTAL; ++i)
UpdateAchievementCriteria(AchievementCriteriaTypes(i));
}