interdev

Untitled

Jun 10th, 2015
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 3.00 KB | None | 0 0
  1. diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
  2. index 4b6b57b..6830cb8 100644
  3. --- a/src/server/game/Achievements/AchievementMgr.cpp
  4. +++ b/src/server/game/Achievements/AchievementMgr.cpp
  5. @@ -575,7 +575,7 @@ void AchievementMgr<Player>::SaveToDB(SQLTransaction& charTrans, SQLTransaction&
  6.                  if (mustSaveForCharacter || !isAccountAchievement)
  7.                  {
  8.                      ssCharDel << "DELETE FROM character_achievement WHERE guid = " << guidLow << " AND achievement IN (";
  9. -                    ssCharIns << "INSERT INTO character_achievement (guid, achievement) VALUES ";
  10. +                    ssCharIns << "INSERT INTO character_achievement (guid, achievement, date) VALUES ";
  11.                      needCharacterExecute = true;
  12.                  }
  13.              }
  14. @@ -598,7 +598,7 @@ void AchievementMgr<Player>::SaveToDB(SQLTransaction& charTrans, SQLTransaction&
  15.              if (mustSaveForCharacter || !isAccountAchievement)
  16.              {
  17.                  ssCharDel << achievementId;
  18. -                ssCharIns << '(' << guidLow << ',' << achievementId << ')';
  19. +                ssCharIns << '(' << guidLow << ',' << achievementId << "," << completionData.date << ')';
  20.              }
  21.  
  22.              /// Mark as saved in db
  23. @@ -920,6 +920,7 @@ void AchievementMgr<Player>::LoadFromDB(PreparedQueryResult achievementResult, P
  24.          {
  25.              Field* fields = achievementResult->Fetch();
  26.              uint32 achievementid = fields[0].GetUInt16();
  27. +            uint32 guid = fields[1].GetUInt32();
  28.  
  29.              // Must not happen: cleanup at server startup in sAchievementMgr->LoadCompletedAchievements()
  30.              AchievementEntry const* achievement = sAchievementMgr->GetAchievement(achievementid);
  31. @@ -927,14 +928,17 @@ void AchievementMgr<Player>::LoadFromDB(PreparedQueryResult achievementResult, P
  32.                  continue;
  33.  
  34.              // Achievement in character_achievement but not in account_achievement, there is a problem.
  35. -            if (m_completedAchievements.find(achievementid) == m_completedAchievements.end())
  36. +            if (m_completedAchievements.find(achievementid) == m_completedAchievements.end() && achievement->flags & ACHIEVEMENT_FLAG_ACCOUNT)
  37.              {
  38. -                TC_LOG_ERROR("achievement", "Achievement '%u' in character_achievement but not in account_achievement, there is a problem.", achievementid);
  39. +                TC_LOG_ERROR("achievement", "Account-wide achievement '%u' in character_achievement but not in account_achievement, there is a problem.", achievementid);
  40.                  continue;
  41.              }
  42.  
  43.              CompletedAchievementData& ca = m_completedAchievements[achievementid];
  44.              ca.completedByThisCharacter = true;
  45. +            ca.date = time_t(fields[2].GetUInt32());
  46. +            ca.changed = false;
  47. +            ca.first_guid = MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER);
  48.              _achievementPoints += achievement->points;
  49.  
  50.          }
Add Comment
Please, Sign In to add comment