diff options
Diffstat (limited to 'src/server/game')
-rw-r--r-- | src/server/game/DataStores/DBCEnums.h | 101 | ||||
-rw-r--r-- | src/server/game/Handlers/AuthHandler.cpp | 13 | ||||
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 13 | ||||
-rw-r--r-- | src/server/game/World/World.cpp | 5 | ||||
-rw-r--r-- | src/server/game/World/World.h | 15 |
5 files changed, 147 insertions, 0 deletions
diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index a0b47fd550f..fd4f5296e82 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -1016,6 +1016,107 @@ enum class FriendshipReputationFlags : int32 DEFINE_ENUM_FLAG(FriendshipReputationFlags); +enum class GameRule : int32 +{ + NoDebuffLimit = 1, + CharNameReservationEnabled = 2, + MaxCharReservationsPerRealm = 3, + MaxAccountCharReservationsPerContentset = 4, + EtaRealmLaunchTime = 5, + TrivialGroupXPPercent = 7, + CharReservationsPerRealmReopenThreshold = 8, + DisablePct = 9, + HardcoreRuleset = 10, + ReplaceAbsentGmSeconds = 11, + ReplaceGmRankLastOnlineSeconds = 12, + GameMode = 13, + CharacterlessLogin = 14, + NoMultiboxing = 15, + VanillaNpcKnockback = 16, + Runecarving = 17, + TalentRespecCostMin = 18, + TalentRespecCostMax = 19, + TalentRespecCostStep = 20, + VanillaRageGenerationModifier = 21, + SelfFoundAllowed = 22, + DisableHonorDecay = 23, + MaxLootDropLevel = 25, + MicrobarScale = 26, + MaxUnitNameDistance = 27, + MaxNameplateDistance = 28, + UserAddonsDisabled = 29, + UserScriptsDisabled = 30, + NonPlayerNameplateScale = 31, + ForcedPartyFrameScale = 32, + CustomActionbarOverlayHeightOffset = 33, + ForcedChatLanguage = 34, + LandingPageFactionID = 35, + CollectionsPanelDisabled = 36, + CharacterPanelDisabled = 37, + SpellbookPanelDisabled = 38, + TalentsPanelDisabled = 39, + AchievementsPanelDisabled = 40, + CommunitiesPanelDisabled = 41, + EncounterJournalDisabled = 42, + FinderPanelDisabled = 43, + StoreDisabled = 44, + HelpPanelDisabled = 45, + GuildsDisabled = 46, + QuestLogMicrobuttonDisabled = 47, + MapPlunderstormCircle = 48, + AfterDeathSpectatingUI = 49, + FrontEndChat = 50, + UniversalNameplateOcclusion = 51, + FastAreaTriggerTick = 52, + AllPlayersAreFastMovers = 53, + IgnoreChrclassDisabledFlag = 54, + CharacterCreateUseFixedBackgroundModel = 55, + ForceAlteredFormsOn = 56, + PlayerNameplateDifficultyIcon = 57, + PlayerNameplateAlternateHealthColor = 58, + AlwaysAllowAlliedRaces = 59, + ActionbarIconIntroDisabled = 60, + ReleaseSpiritGhostDisabled = 61, + DeleteItemConfirmationDisabled = 62, + ChatLinkLevelToastsDisabled = 63, + BagsUIDisabled = 64, + PetBattlesDisabled = 65, + PerksProgramActivityTrackingDisabled = 66, + MaximizeWorldMapDisabled = 67, + WorldMapTrackingOptionsDisabled = 68, + WorldMapTrackingPinDisabled = 69, + WorldMapHelpPlateDisabled = 70, + QuestLogPanelDisabled = 71, + QuestLogSuperTrackingDisabled = 72, + TutorialFrameDisabled = 73, + IngameMailNotificationDisabled = 74, + IngameCalendarDisabled = 75, + IngameTrackingDisabled = 76, + IngameWhoListDisabled = 77, + RaceAlteredFormsDisabled = 78, + IngameFriendsListDisabled = 79, + MacrosDisabled = 80, + CompactRaidFrameManagerDisabled = 81, + EditModeDisabled = 82, + InstanceDifficultyBannerDisabled = 83, + FullCharacterCreateDisabled = 84, + TargetFrameBuffsDisabled = 85, + UnitFramePvPContextualDisabled = 86, + BlockWhileSheathedAllowed = 88, + VanillaAccountMailInstant = 91, + ClearMailOnRealmTransfer = 92, + PremadeGroupFinderStyle = 93, + PlunderstormAreaSelection = 94, + GroupFinderCapabilities = 98, + WorldMapLegendDisabled = 99, + WorldMapFrameStrata = 100, + MerchantFilterDisabled = 101, + SummoningStones = 108, + TransmogEnabled = 109, + MailGameRule = 132, + LootMethodStyle = 157, +}; + enum class GlobalCurve : int32 { CritDiminishing = 0, diff --git a/src/server/game/Handlers/AuthHandler.cpp b/src/server/game/Handlers/AuthHandler.cpp index 01ce89b2471..081d986d6f6 100644 --- a/src/server/game/Handlers/AuthHandler.cpp +++ b/src/server/game/Handlers/AuthHandler.cpp @@ -124,5 +124,18 @@ void WorldSession::SendFeatureSystemStatusGlueScreen() features.EuropaTicketSystemStatus->ComplaintsEnabled = sWorld->getBoolConfig(CONFIG_SUPPORT_COMPLAINTS_ENABLED); features.EuropaTicketSystemStatus->SuggestionsEnabled = sWorld->getBoolConfig(CONFIG_SUPPORT_SUGGESTIONS_ENABLED); + for (World::GameRule const& gameRule : sWorld->GetGameRules()) + { + WorldPackets::System::GameRuleValuePair& rule = features.GameRules.emplace_back(); + rule.Rule = AsUnderlyingType(gameRule.Rule); + std::visit([&]<typename T>(T value) + { + if constexpr (std::is_same_v<T, float>) + rule.ValueF = value; + else + rule.Value = value; + }, gameRule.Value); + } + SendPacket(features.Write()); } diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index f0f60870bf1..1628f0c4dd1 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1533,6 +1533,19 @@ void WorldSession::SendFeatureSystemStatus() features.SpeakForMeAllowed = false; + for (World::GameRule const& gameRule : sWorld->GetGameRules()) + { + WorldPackets::System::GameRuleValuePair& rule = features.GameRules.emplace_back(); + rule.Rule = AsUnderlyingType(gameRule.Rule); + std::visit([&]<typename T>(T value) + { + if constexpr (std::is_same_v<T, float>) + rule.ValueF = value; + else + rule.Value = value; + }, gameRule.Value); + } + SendPacket(features.Write()); } diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index e4996cbdb9d..27e5e1480c6 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1205,6 +1205,11 @@ void World::LoadConfigSettings(bool reload) if (m_int_configs[CONFIG_PACKET_SPOOF_BANMODE] == BAN_CHARACTER) m_int_configs[CONFIG_PACKET_SPOOF_BANMODE] = BAN_ACCOUNT; + _gameRules = + { + { .Rule = ::GameRule::TransmogEnabled, .Value = true } + }; + if (reload) { sSupportMgr->SetSupportSystemStatus(m_bool_configs[CONFIG_SUPPORT_ENABLED]); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 0c43ae0f273..ed13a6e308f 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -36,12 +36,14 @@ #include <map> #include <memory> #include <unordered_map> +#include <variant> #include <vector> class Player; class WorldPacket; class WorldSession; class WorldSocket; +enum class GameRule : int32; // ServerMessages.dbc enum ServerMessageType @@ -786,6 +788,17 @@ class TC_GAME_API World void SetForcedWarModeFactionBalanceState(TeamId team, int32 reward = 0); void DisableForcedWarModeFactionBalanceState(); + struct GameRule + { + ::GameRule Rule; + std::variant<int32, float, bool> Value; + }; + + std::vector<GameRule> const& GetGameRules() const + { + return _gameRules; + } + protected: void _UpdateGameTime(); @@ -898,6 +911,8 @@ class TC_GAME_API World uint32 _warnDiff; time_t _warnShutdownTime; + std::vector<GameRule> _gameRules; + // War mode balancing void UpdateWarModeRewardValues(); |