Core/Achievements: ported start event and fail event mechanics from master branch
This commit is contained in:
1 parent
a599f7461d
commit
ff0eb86c54
41 files changed
+325
-362
No files matched your search
@@ -1031,7 +1031,7 @@ void Player::Update(uint32 p_time)
|
||||
}
|
||||
}
|
||||
|
||||
m_achievementMgr->UpdateTimedAchievements(p_time);
|
||||
m_achievementMgr->UpdateTimedAchievementCriteria(Milliseconds(p_time));
|
||||
|
||||
if (HasUnitState(UNIT_STATE_MELEE_ATTACKING) && !HasUnitState(UNIT_STATE_CASTING))
|
||||
{
|
||||
@@ -1350,7 +1350,7 @@ void Player::setDeathState(DeathState s)
|
||||
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_DEATH_IN_DUNGEON, 1);
|
||||
|
||||
// reset all death criterias
|
||||
ResetAchievementCriteria(ACHIEVEMENT_CRITERIA_CONDITION_NO_DEATH, 0);
|
||||
FailAchievementCriteria(AchievementCriteriaFailEvent::Death, 0);
|
||||
}
|
||||
|
||||
Unit::setDeathState(s);
|
||||
@@ -2340,6 +2340,7 @@ void Player::GiveLevel(uint8 level)
|
||||
CharacterDatabase.CommitTransaction(trans);
|
||||
}
|
||||
|
||||
StartAchievementCriteria(AchievementCriteriaStartEvent::ReachLevel, level);
|
||||
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL);
|
||||
|
||||
// Refer-A-Friend
|
||||
@@ -14188,7 +14189,7 @@ void Player::AddQuest(Quest const* quest, Object* questGiver)
|
||||
|
||||
m_QuestStatusSave[quest_id] = QUEST_DEFAULT_SAVE_TYPE;
|
||||
|
||||
StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_QUEST, quest_id);
|
||||
StartAchievementCriteria(AchievementCriteriaStartEvent::AcceptQuest, quest_id);
|
||||
|
||||
SendQuestUpdate(quest_id);
|
||||
|
||||
@@ -14409,6 +14410,7 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
|
||||
SetDailyQuestStatus(quest_id);
|
||||
if (quest->IsDaily())
|
||||
{
|
||||
StartAchievementCriteria(AchievementCriteriaStartEvent::CompleteDailyQuest, 0);
|
||||
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST, quest_id);
|
||||
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST_DAILY, quest_id);
|
||||
}
|
||||
@@ -15653,7 +15655,7 @@ void Player::KilledMonsterCredit(uint32 entry, ObjectGuid guid /*= ObjectGuid::E
|
||||
real_entry = killed->GetEntry();
|
||||
}
|
||||
|
||||
StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_CREATURE, real_entry); // MUST BE CALLED FIRST
|
||||
StartAchievementCriteria(AchievementCriteriaStartEvent::KillNPC, real_entry); // MUST BE CALLED FIRST
|
||||
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE, real_entry, addkillcount, 0, killed);
|
||||
|
||||
for (uint8 i = 0; i < MAX_QUEST_LOG_SIZE; ++i)
|
||||
@@ -15709,6 +15711,7 @@ void Player::KilledMonsterCredit(uint32 entry, ObjectGuid guid /*= ObjectGuid::E
|
||||
|
||||
void Player::KilledPlayerCredit(uint16 count)
|
||||
{
|
||||
StartAchievementCriteria(AchievementCriteriaStartEvent::KillPlayer, 0);
|
||||
for (uint8 i = 0; i < MAX_QUEST_LOG_SIZE; ++i)
|
||||
{
|
||||
uint32 questid = GetQuestSlotQuestId(i);
|
||||
@@ -23357,7 +23360,6 @@ void Player::ResetWeeklyQuestStatus()
|
||||
m_weeklyquests.clear();
|
||||
// DB data deleted in caller
|
||||
m_WeeklyQuestChanged = false;
|
||||
|
||||
}
|
||||
|
||||
void Player::ResetSeasonalQuestStatus(uint16 event_id, time_t eventStartTime)
|
||||
@@ -25319,19 +25321,14 @@ bool Player::HasAchieved(uint32 achievementId) const
|
||||
return m_achievementMgr->HasAchieved(achievementId);
|
||||
}
|
||||
|
||||
void Player::StartTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry, uint32 timeLost/* = 0*/)
|
||||
void Player::StartAchievementCriteria(AchievementCriteriaStartEvent startEvent, uint32 entry, Milliseconds timeLost/* = Milliseconds::zero()*/)
|
||||
{
|
||||
m_achievementMgr->StartTimedAchievement(type, entry, timeLost);
|
||||
m_achievementMgr->StartAchievementCriteria(startEvent, entry, timeLost);
|
||||
}
|
||||
|
||||
void Player::RemoveTimedAchievement(AchievementCriteriaTimedTypes type, uint32 entry)
|
||||
void Player::FailAchievementCriteria(AchievementCriteriaFailEvent failEvent, int32 failAsset)
|
||||
{
|
||||
m_achievementMgr->RemoveTimedAchievement(type, entry);
|
||||
}
|
||||
|
||||
void Player::ResetAchievementCriteria(AchievementCriteriaCondition condition, uint64 value, bool evenIfCriteriaComplete /* = false*/)
|
||||
{
|
||||
m_achievementMgr->ResetAchievementCriteria(condition, value, evenIfCriteriaComplete);
|
||||
m_achievementMgr->FailAchievementCriteria(failEvent, failAsset);
|
||||
}
|
||||
|
||||
void Player::UpdateAchievementCriteria(AchievementCriteriaTypes type, uint64 miscValue1 /*= 0*/, uint64 miscValue2 /*= 0*/, uint64 miscValue3 /*= 0*/, WorldObject* ref /*= nullptr*/, GameObject* go /*= nullptr*/)
|
||||
|
||||
Reference in new issue
Block a user