mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 17:05:44 +01:00
Core/Achievements: Reduce differences between branches (#27675)
This commit is contained in:
@@ -666,13 +666,11 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement)
|
||||
if (GetPlayer()->GetSession()->PlayerLoading())
|
||||
return;
|
||||
|
||||
// Don't send for achievements with ACHIEVEMENT_FLAG_TRACKING
|
||||
// Don't send for achievements with ACHIEVEMENT_FLAG_HIDDEN
|
||||
if (achievement->Flags & ACHIEVEMENT_FLAG_HIDDEN)
|
||||
return;
|
||||
|
||||
#ifdef TRINITY_DEBUG
|
||||
TC_LOG_DEBUG("achievement", "AchievementMgr::SendAchievementEarned(%u)", achievement->ID);
|
||||
#endif
|
||||
TC_LOG_DEBUG("achievement", "AchievementMgr::SendAchievementEarned(%u)", achievement->ID);
|
||||
|
||||
if (Guild* guild = sGuildMgr->GetGuildById(GetPlayer()->GetGuildId()))
|
||||
{
|
||||
@@ -717,7 +715,7 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement)
|
||||
|
||||
void AchievementMgr::SendCriteriaUpdate(AchievementCriteriaEntry const* entry, CriteriaProgress const* progress, uint32 timeElapsed, bool timedCompleted) const
|
||||
{
|
||||
WorldPacket data(SMSG_CRITERIA_UPDATE, 8+4+8);
|
||||
WorldPacket data(SMSG_CRITERIA_UPDATE, 8 + 4 + 8);
|
||||
data << uint32(entry->ID);
|
||||
|
||||
// the counter is packed like a packed Guid
|
||||
@@ -773,7 +771,10 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
||||
{
|
||||
AchievementEntry const* achievement = sAchievementMgr->GetAchievement(achievementCriteria->AchievementID);
|
||||
if (!achievement)
|
||||
{
|
||||
TC_LOG_ERROR("achievement", "UpdateAchievementCriteria: Achievement %u not found!", achievementCriteria->AchievementID);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!CanUpdateCriteria(achievementCriteria, achievement, miscValue1, miscValue2, ref))
|
||||
continue;
|
||||
@@ -875,6 +876,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_VISIT_BARBER_SHOP:
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM:
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_EQUIP_ITEM:
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT:
|
||||
SetCriteriaProgress(achievementCriteria, 1, PROGRESS_SET);
|
||||
break;
|
||||
|
||||
@@ -890,10 +892,6 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
||||
if (uint32 maxSkillvalue = GetPlayer()->GetPureMaxSkillValue(achievementCriteria->Asset.SkillID))
|
||||
SetCriteriaProgress(achievementCriteria, maxSkillvalue);
|
||||
break;
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT:
|
||||
if ((miscValue1 && achievementCriteria->Asset.AchievementID == miscValue1) || (!miscValue1 && m_completedAchievements.find(achievementCriteria->Asset.AchievementID) != m_completedAchievements.end()))
|
||||
SetCriteriaProgress(achievementCriteria, 1);
|
||||
break;
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST_COUNT:
|
||||
SetCriteriaProgress(achievementCriteria, GetPlayer()->GetRewardedQuestCount());
|
||||
break;
|
||||
@@ -915,7 +913,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
||||
// 1st time. Start count.
|
||||
progressType = PROGRESS_SET;
|
||||
else if (progress->date < (nextDailyResetTime - 2 * DAY))
|
||||
// last progress is older than 2 days. Player missed 1 day => Retart count.
|
||||
// last progress is older than 2 days. Player missed 1 day => Restart count.
|
||||
progressType = PROGRESS_SET;
|
||||
else if (progress->date < (nextDailyResetTime - DAY))
|
||||
// last progress is between 1 and 2 days. => 1st time of the day.
|
||||
@@ -1291,16 +1289,16 @@ bool AchievementMgr::IsCompletedAchievement(AchievementEntry const* entry)
|
||||
return false;
|
||||
|
||||
// for achievement with referenced achievement criterias get from referenced and counter from self
|
||||
uint32 achievmentForTestId = entry->SharesCriteria ? entry->SharesCriteria : entry->ID;
|
||||
uint32 achievmentForTestCount = entry->MinimumCriteria;
|
||||
uint32 achievementForTestId = entry->SharesCriteria ? entry->SharesCriteria : entry->ID;
|
||||
uint32 achievementForTestCount = entry->MinimumCriteria;
|
||||
|
||||
AchievementCriteriaEntryList const* cList = sAchievementMgr->GetAchievementCriteriaByAchievement(achievmentForTestId);
|
||||
AchievementCriteriaEntryList const* cList = sAchievementMgr->GetAchievementCriteriaByAchievement(achievementForTestId);
|
||||
if (!cList)
|
||||
return false;
|
||||
uint32 count = 0;
|
||||
|
||||
// For SUMM achievements, we have to count the progress of each criteria of the achievement.
|
||||
// Oddly, the target count is NOT countained in the achievement, but in each individual criteria
|
||||
// Oddly, the target count is NOT contained in the achievement, but in each individual criteria
|
||||
if (entry->Flags & ACHIEVEMENT_FLAG_SUMM)
|
||||
{
|
||||
for (AchievementCriteriaEntry const* criteria : *cList)
|
||||
@@ -1331,12 +1329,12 @@ bool AchievementMgr::IsCompletedAchievement(AchievementEntry const* entry)
|
||||
completed_all = false;
|
||||
|
||||
// completed as have req. count of completed criterias
|
||||
if (achievmentForTestCount > 0 && achievmentForTestCount <= count)
|
||||
if (achievementForTestCount > 0 && achievementForTestCount <= count)
|
||||
return true;
|
||||
}
|
||||
|
||||
// all criterias completed requirement
|
||||
if (completed_all && achievmentForTestCount == 0)
|
||||
if (completed_all && achievementForTestCount == 0)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
@@ -1582,14 +1580,14 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement)
|
||||
|
||||
void AchievementMgr::SendAllAchievementData() const
|
||||
{
|
||||
WorldPacket data(SMSG_ALL_ACHIEVEMENT_DATA, m_completedAchievements.size()*8+4+m_criteriaProgress.size()*38+4);
|
||||
WorldPacket data(SMSG_ALL_ACHIEVEMENT_DATA, m_completedAchievements.size() * 8 + 4 + m_criteriaProgress.size() * 38 + 4);
|
||||
BuildAllDataPacket(&data);
|
||||
GetPlayer()->SendDirectMessage(&data);
|
||||
}
|
||||
|
||||
void AchievementMgr::SendRespondInspectAchievements(Player* player) const
|
||||
{
|
||||
WorldPacket data(SMSG_RESPOND_INSPECT_ACHIEVEMENTS, 9+m_completedAchievements.size()*8+4+m_criteriaProgress.size()*38+4);
|
||||
WorldPacket data(SMSG_RESPOND_INSPECT_ACHIEVEMENTS, 9 + m_completedAchievements.size() * 8 + 4 + m_criteriaProgress.size() * 38 + 4);
|
||||
data << GetPlayer()->GetPackGUID();
|
||||
BuildAllDataPacket(&data);
|
||||
player->SendDirectMessage(&data);
|
||||
@@ -1750,7 +1748,6 @@ bool AchievementMgr::RequirementsSatisfied(AchievementCriteriaEntry const* achie
|
||||
return false;
|
||||
break;
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL:
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT:
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST_COUNT:
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST_DAILY:
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_TEAM_RATING:
|
||||
@@ -1766,19 +1763,19 @@ bool AchievementMgr::RequirementsSatisfied(AchievementCriteriaEntry const* achie
|
||||
break;
|
||||
|
||||
// specialized cases
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT:
|
||||
if ((miscValue1 && achievementCriteria->Asset.AchievementID != miscValue1) || (!miscValue1 && m_completedAchievements.find(achievementCriteria->Asset.AchievementID) == m_completedAchievements.end()))
|
||||
return false;
|
||||
break;
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_WIN_BG:
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND:
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_DEATH_AT_MAP:
|
||||
if (!miscValue1)
|
||||
return false;
|
||||
if (achievementCriteria->Asset.MapID != GetPlayer()->GetMapId())
|
||||
if (!miscValue1 || achievementCriteria->Asset.MapID != GetPlayer()->GetMapId())
|
||||
return false;
|
||||
break;
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE:
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_KILLED_BY_CREATURE:
|
||||
if (!miscValue1)
|
||||
return false;
|
||||
if (achievementCriteria->Asset.CreatureID != miscValue1)
|
||||
if (!miscValue1 || achievementCriteria->Asset.CreatureID != miscValue1)
|
||||
return false;
|
||||
break;
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL:
|
||||
@@ -1826,9 +1823,7 @@ bool AchievementMgr::RequirementsSatisfied(AchievementCriteriaEntry const* achie
|
||||
return false;
|
||||
break;
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_DEATHS_FROM:
|
||||
if (!miscValue1)
|
||||
return false;
|
||||
if (miscValue2 != achievementCriteria->Asset.DamageType)
|
||||
if (!miscValue1 || miscValue2 != achievementCriteria->Asset.DamageType)
|
||||
return false;
|
||||
break;
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST:
|
||||
@@ -2581,7 +2576,8 @@ void AchievementGlobalMgr::LoadCompletedAchievements()
|
||||
}
|
||||
else if (achievement->Flags & (ACHIEVEMENT_FLAG_REALM_FIRST_REACH | ACHIEVEMENT_FLAG_REALM_FIRST_KILL))
|
||||
_allCompletedAchievements[achievementId] = SystemTimePoint::max();
|
||||
} while (result->NextRow());
|
||||
}
|
||||
while (result->NextRow());
|
||||
|
||||
TC_LOG_INFO("server.loading", ">> Loaded %lu realm first completed achievements in %u ms.", (unsigned long)_allCompletedAchievements.size(), GetMSTimeDiffToNow(oldMSTime));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user