Skip to content

Commit 36d6cce

Browse files
rgsonsogladev
andauthored
feat(Core/Conf): Add config for Realm First! race limit (azerothcore#26053)
Co-authored-by: sogladev <sogladev@gmail.com>
1 parent a4dee23 commit 36d6cce

4 files changed

Lines changed: 22 additions & 8 deletions

File tree

src/server/apps/worldserver/worldserver.conf.dist

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2260,6 +2260,15 @@ SpellQueue.Window = 400
22602260

22612261
Achievement.RealmFirstKillWindow = 60
22622262

2263+
#
2264+
# Achievement.RealmFirstRaceLimitOnePerCharacter
2265+
# Description: Limit 'Realm First!' race achievements to one per character. Prevents abuse
2266+
# of the race/faction change service to obtain multiple achievements.
2267+
# Default: 1 - (Enabled)
2268+
# 0 - (Disabled)
2269+
2270+
Achievement.RealmFirstRaceLimitOnePerCharacter = 1
2271+
22632272
#
22642273
###################################################################################################
22652274

src/server/game/Achievements/AchievementMgr.cpp

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1834,14 +1834,17 @@ bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achieve
18341834
if (sAchievementMgr->IsRealmCompleted(achievement))
18351835
return false;
18361836

1837-
// A character may only have 1 race-specific 'Realm First!' achievement
1838-
// prevent clever use of the race/faction change service to obtain multiple 'Realm First!' achievements
1839-
constexpr std::array<uint32, 9> raceSpecificRealmFirstAchievements { 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413 };
1840-
bool isRaceSpecific = std::ranges::find(raceSpecificRealmFirstAchievements, achievement->ID) != std::ranges::end(raceSpecificRealmFirstAchievements);
1841-
if (isRaceSpecific)
1842-
for (uint32 raceAchievementId : raceSpecificRealmFirstAchievements)
1843-
if (raceAchievementId != achievement->ID && HasAchieved(raceAchievementId))
1844-
return false;
1837+
if (sWorld->getBoolConfig(CONFIG_ACHIEVEMENT_REALM_FIRST_RACE_LIMIT_ONE_PER_CHARACTER))
1838+
{
1839+
// A character may only have 1 race-specific 'Realm First!' achievement
1840+
// prevent clever use of the race/faction change service to obtain multiple 'Realm First!' achievements
1841+
constexpr std::array<uint32, 9> raceSpecificRealmFirstAchievements { 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413 };
1842+
bool isRaceSpecific = std::ranges::find(raceSpecificRealmFirstAchievements, achievement->ID) != std::ranges::end(raceSpecificRealmFirstAchievements);
1843+
if (isRaceSpecific)
1844+
for (uint32 raceAchievementId : raceSpecificRealmFirstAchievements)
1845+
if (raceAchievementId != achievement->ID && HasAchieved(raceAchievementId))
1846+
return false;
1847+
}
18451848
}
18461849

18471850
// pussywizard: progress will be deleted after getting the achievement (optimization)

src/server/game/World/WorldConfig.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -693,4 +693,5 @@ void WorldConfig::BuildConfigCache()
693693

694694
// Achievement
695695
SetConfigValue<uint32>(CONFIG_ACHIEVEMENT_REALM_FIRST_KILL_WINDOW, "Achievement.RealmFirstKillWindow", 60);
696+
SetConfigValue<bool>(CONFIG_ACHIEVEMENT_REALM_FIRST_RACE_LIMIT_ONE_PER_CHARACTER, "Achievement.RealmFirstRaceLimitOnePerCharacter", true);
696697
}

src/server/game/World/WorldConfig.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,7 @@ enum ServerConfigs
499499
CONFIG_NEW_CHAR_STRING,
500500
CONFIG_VALIDATE_SKILL_LEARNED_BY_SPELLS,
501501
CONFIG_ACHIEVEMENT_REALM_FIRST_KILL_WINDOW,
502+
CONFIG_ACHIEVEMENT_REALM_FIRST_RACE_LIMIT_ONE_PER_CHARACTER,
502503
CONFIG_CHATLOG_ENABLED,
503504

504505
MAX_NUM_SERVER_CONFIGS

0 commit comments

Comments
 (0)