mirror of
https://github.com/liyunfan1223/azerothcore-wotlk.git
synced 2026-08-08 07:48:02 +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.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))
|
if (sAchievementMgr->IsRealmCompleted(achievement))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// A character may only have 1 race-specific 'Realm First!' achievement
|
if (sWorld->getBoolConfig(CONFIG_ACHIEVEMENT_REALM_FIRST_RACE_LIMIT_ONE_PER_CHARACTER))
|
||||||
// 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 };
|
// A character may only have 1 race-specific 'Realm First!' achievement
|
||||||
bool isRaceSpecific = std::ranges::find(raceSpecificRealmFirstAchievements, achievement->ID) != std::ranges::end(raceSpecificRealmFirstAchievements);
|
// prevent clever use of the race/faction change service to obtain multiple 'Realm First!' achievements
|
||||||
if (isRaceSpecific)
|
constexpr std::array<uint32, 9> raceSpecificRealmFirstAchievements { 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413 };
|
||||||
for (uint32 raceAchievementId : raceSpecificRealmFirstAchievements)
|
bool isRaceSpecific = std::ranges::find(raceSpecificRealmFirstAchievements, achievement->ID) != std::ranges::end(raceSpecificRealmFirstAchievements);
|
||||||
if (raceAchievementId != achievement->ID && HasAchieved(raceAchievementId))
|
if (isRaceSpecific)
|
||||||
return false;
|
for (uint32 raceAchievementId : raceSpecificRealmFirstAchievements)
|
||||||
|
if (raceAchievementId != achievement->ID && HasAchieved(raceAchievementId))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// pussywizard: progress will be deleted after getting the achievement (optimization)
|
// pussywizard: progress will be deleted after getting the achievement (optimization)
|
||||||
|
|||||||
@@ -693,4 +693,5 @@ void WorldConfig::BuildConfigCache()
|
|||||||
|
|
||||||
// Achievement
|
// Achievement
|
||||||
SetConfigValue<uint32>(CONFIG_ACHIEVEMENT_REALM_FIRST_KILL_WINDOW, "Achievement.RealmFirstKillWindow", 60);
|
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_NEW_CHAR_STRING,
|
||||||
CONFIG_VALIDATE_SKILL_LEARNED_BY_SPELLS,
|
CONFIG_VALIDATE_SKILL_LEARNED_BY_SPELLS,
|
||||||
CONFIG_ACHIEVEMENT_REALM_FIRST_KILL_WINDOW,
|
CONFIG_ACHIEVEMENT_REALM_FIRST_KILL_WINDOW,
|
||||||
|
CONFIG_ACHIEVEMENT_REALM_FIRST_RACE_LIMIT_ONE_PER_CHARACTER,
|
||||||
CONFIG_CHATLOG_ENABLED,
|
CONFIG_CHATLOG_ENABLED,
|
||||||
|
|
||||||
MAX_NUM_SERVER_CONFIGS
|
MAX_NUM_SERVER_CONFIGS
|
||||||
|
|||||||
Reference in New Issue
Block a user