mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 07:37:01 +00:00
Implemented ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE
Implemented faction specific achievements
This commit is contained in:
parent
0d6805ec94
commit
d885ba7fe1
3 changed files with 22 additions and 2 deletions
|
|
@ -179,6 +179,14 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
||||||
if(achievementCriteria->groupFlag & ACHIEVEMENT_CRITERIA_GROUP_NOT_IN_GROUP && GetPlayer()->GetGroup())
|
if(achievementCriteria->groupFlag & ACHIEVEMENT_CRITERIA_GROUP_NOT_IN_GROUP && GetPlayer()->GetGroup())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
AchievementEntry const *achievement = sAchievementStore.LookupEntry(achievementCriteria->referredAchievement);
|
||||||
|
if(!achievement)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if(achievement->factionFlag == ACHIEVEMENT_FACTION_FLAG_HORDE && GetPlayer()->GetTeam() != HORDE ||
|
||||||
|
achievement->factionFlag == ACHIEVEMENT_FACTION_FLAG_ALLIANCE && GetPlayer()->GetTeam() != ALLIANCE)
|
||||||
|
continue;
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL:
|
case ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL:
|
||||||
|
|
@ -187,6 +195,13 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_BUY_BANK_SLOT:
|
case ACHIEVEMENT_CRITERIA_TYPE_BUY_BANK_SLOT:
|
||||||
SetCriteriaProgress(achievementCriteria, GetPlayer()->GetByteValue(PLAYER_BYTES_2, 2)+1);
|
SetCriteriaProgress(achievementCriteria, GetPlayer()->GetByteValue(PLAYER_BYTES_2, 2)+1);
|
||||||
break;
|
break;
|
||||||
|
case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE:
|
||||||
|
// AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
|
||||||
|
if(!miscvalue1)
|
||||||
|
continue;
|
||||||
|
if(achievementCriteria->kill_creature.creatureID != miscvalue1)
|
||||||
|
continue;
|
||||||
|
SetCriteriaProgress(achievementCriteria, miscvalue2, true);
|
||||||
}
|
}
|
||||||
if(IsCompletedCriteria(achievementCriteria))
|
if(IsCompletedCriteria(achievementCriteria))
|
||||||
CompletedCriteria(achievementCriteria);
|
CompletedCriteria(achievementCriteria);
|
||||||
|
|
@ -243,6 +258,8 @@ bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achieve
|
||||||
return progress->counter >= achievementCriteria->reach_level.level;
|
return progress->counter >= achievementCriteria->reach_level.level;
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_BUY_BANK_SLOT:
|
case ACHIEVEMENT_CRITERIA_TYPE_BUY_BANK_SLOT:
|
||||||
return progress->counter >= achievementCriteria->buy_bank_slot.numberOfSlots;
|
return progress->counter >= achievementCriteria->buy_bank_slot.numberOfSlots;
|
||||||
|
case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE:
|
||||||
|
return progress->counter >= achievementCriteria->kill_creature.creatureCount;
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT:
|
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT:
|
||||||
return m_completedAchievements.find(achievementCriteria->complete_achievement.linkedAchievement) != m_completedAchievements.end();
|
return m_completedAchievements.find(achievementCriteria->complete_achievement.linkedAchievement) != m_completedAchievements.end();
|
||||||
}
|
}
|
||||||
|
|
@ -289,7 +306,7 @@ AchievementCompletionState AchievementMgr::GetAchievementCompletionState(Achieve
|
||||||
return ACHIEVEMENT_COMPLETED_COMPLETED_NOT_STORED;
|
return ACHIEVEMENT_COMPLETED_COMPLETED_NOT_STORED;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry, uint32 newValue)
|
void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry, uint32 newValue, bool relative)
|
||||||
{
|
{
|
||||||
sLog.outString("AchievementMgr::SetCriteriaProgress(%u, %u)", entry->ID, newValue);
|
sLog.outString("AchievementMgr::SetCriteriaProgress(%u, %u)", entry->ID, newValue);
|
||||||
CriteriaProgress *progress = NULL;
|
CriteriaProgress *progress = NULL;
|
||||||
|
|
@ -302,6 +319,8 @@ void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
progress = m_criteriaProgress[entry->ID];
|
progress = m_criteriaProgress[entry->ID];
|
||||||
|
if(relative)
|
||||||
|
newValue += progress->counter;
|
||||||
if(progress->counter == newValue)
|
if(progress->counter == newValue)
|
||||||
return;
|
return;
|
||||||
progress->counter = newValue;
|
progress->counter = newValue;
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ class AchievementMgr
|
||||||
private:
|
private:
|
||||||
void SendAchievementEarned(uint32 achievementId);
|
void SendAchievementEarned(uint32 achievementId);
|
||||||
void SendCriteriaUpdate(CriteriaProgress *progress);
|
void SendCriteriaUpdate(CriteriaProgress *progress);
|
||||||
void SetCriteriaProgress(AchievementCriteriaEntry const* entry, uint32 newValue);
|
void SetCriteriaProgress(AchievementCriteriaEntry const* entry, uint32 newValue, bool relative=false);
|
||||||
void CompletedCriteria(AchievementCriteriaEntry const* entry);
|
void CompletedCriteria(AchievementCriteriaEntry const* entry);
|
||||||
void CompletedAchievement(AchievementEntry const* entry);
|
void CompletedAchievement(AchievementEntry const* entry);
|
||||||
bool IsCompletedCriteria(AchievementCriteriaEntry const* entry);
|
bool IsCompletedCriteria(AchievementCriteriaEntry const* entry);
|
||||||
|
|
|
||||||
|
|
@ -13100,6 +13100,7 @@ void Player::ItemRemovedQuestCheck( uint32 entry, uint32 count )
|
||||||
void Player::KilledMonster( uint32 entry, uint64 guid )
|
void Player::KilledMonster( uint32 entry, uint64 guid )
|
||||||
{
|
{
|
||||||
uint32 addkillcount = 1;
|
uint32 addkillcount = 1;
|
||||||
|
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE, entry, addkillcount);
|
||||||
for( int i = 0; i < MAX_QUEST_LOG_SIZE; i++ )
|
for( int i = 0; i < MAX_QUEST_LOG_SIZE; i++ )
|
||||||
{
|
{
|
||||||
uint32 questid = GetQuestSlotQuestId(i);
|
uint32 questid = GetQuestSlotQuestId(i);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue