mirror of
https://github.com/liyunfan1223/azerothcore-wotlk.git
synced 2026-08-04 22:07:52 +00:00
feat(Core/Conf): Add config for Realm First! race limit (#26053)
Co-authored-by: sogladev <sogladev@gmail.com>
This commit is contained in:
@@ -2260,6 +2260,15 @@ SpellQueue.Window = 400
|
||||
|
||||
Achievement.RealmFirstKillWindow = 60
|
||||
|
||||
#
|
||||
# Achievement.RealmFirstRaceLimitOnePerCharacter
|
||||
# Description: Limit 'Realm First!' race achievements to one per character. Prevents abuse
|
||||
# of the race/faction change service to obtain multiple achievements.
|
||||
# Default: 1 - (Enabled)
|
||||
# 0 - (Disabled)
|
||||
|
||||
Achievement.RealmFirstRaceLimitOnePerCharacter = 1
|
||||
|
||||
#
|
||||
###################################################################################################
|
||||
|
||||
|
||||
@@ -1834,14 +1834,17 @@ bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achieve
|
||||
if (sAchievementMgr->IsRealmCompleted(achievement))
|
||||
return false;
|
||||
|
||||
// A character may only have 1 race-specific 'Realm First!' achievement
|
||||
// prevent clever use of the race/faction change service to obtain multiple 'Realm First!' achievements
|
||||
constexpr std::array<uint32, 9> raceSpecificRealmFirstAchievements { 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413 };
|
||||
bool isRaceSpecific = std::ranges::find(raceSpecificRealmFirstAchievements, achievement->ID) != std::ranges::end(raceSpecificRealmFirstAchievements);
|
||||
if (isRaceSpecific)
|
||||
for (uint32 raceAchievementId : raceSpecificRealmFirstAchievements)
|
||||
if (raceAchievementId != achievement->ID && HasAchieved(raceAchievementId))
|
||||
return false;
|
||||
if (sWorld->getBoolConfig(CONFIG_ACHIEVEMENT_REALM_FIRST_RACE_LIMIT_ONE_PER_CHARACTER))
|
||||
{
|
||||
// A character may only have 1 race-specific 'Realm First!' achievement
|
||||
// prevent clever use of the race/faction change service to obtain multiple 'Realm First!' achievements
|
||||
constexpr std::array<uint32, 9> raceSpecificRealmFirstAchievements { 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413 };
|
||||
bool isRaceSpecific = std::ranges::find(raceSpecificRealmFirstAchievements, achievement->ID) != std::ranges::end(raceSpecificRealmFirstAchievements);
|
||||
if (isRaceSpecific)
|
||||
for (uint32 raceAchievementId : raceSpecificRealmFirstAchievements)
|
||||
if (raceAchievementId != achievement->ID && HasAchieved(raceAchievementId))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// pussywizard: progress will be deleted after getting the achievement (optimization)
|
||||
|
||||
@@ -693,4 +693,5 @@ void WorldConfig::BuildConfigCache()
|
||||
|
||||
// Achievement
|
||||
SetConfigValue<uint32>(CONFIG_ACHIEVEMENT_REALM_FIRST_KILL_WINDOW, "Achievement.RealmFirstKillWindow", 60);
|
||||
SetConfigValue<bool>(CONFIG_ACHIEVEMENT_REALM_FIRST_RACE_LIMIT_ONE_PER_CHARACTER, "Achievement.RealmFirstRaceLimitOnePerCharacter", true);
|
||||
}
|
||||
|
||||
@@ -499,6 +499,7 @@ enum ServerConfigs
|
||||
CONFIG_NEW_CHAR_STRING,
|
||||
CONFIG_VALIDATE_SKILL_LEARNED_BY_SPELLS,
|
||||
CONFIG_ACHIEVEMENT_REALM_FIRST_KILL_WINDOW,
|
||||
CONFIG_ACHIEVEMENT_REALM_FIRST_RACE_LIMIT_ONE_PER_CHARACTER,
|
||||
CONFIG_CHATLOG_ENABLED,
|
||||
|
||||
MAX_NUM_SERVER_CONFIGS
|
||||
|
||||
Reference in New Issue
Block a user