From 8f1240d25ee6d994fe17d6bc063d2912e777c41d Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Sun, 1 May 2022 18:35:42 -0700 Subject: [PATCH] fix: Fixes expansion flags for animations (#1009) --- Distribution/Data/expansion.json | 64 ++++--------------- Projects/Server/ExpansionInfo.cs | 33 ++-------- .../Server/Json/Converters/FlagsConverter.cs | 7 +- .../Network/Packets/OutgoingAccountPackets.cs | 5 ++ 4 files changed, 29 insertions(+), 80 deletions(-) diff --git a/Distribution/Data/expansion.json b/Distribution/Data/expansion.json index 90be17229..a89041813 100644 --- a/Distribution/Data/expansion.json +++ b/Distribution/Data/expansion.json @@ -4,7 +4,6 @@ "ClientVersion": null, "ClientFlags": null, "FeatureFlags": { - "None": true, "T2A": false, "UOR": false, "UOTD": false, @@ -31,7 +30,6 @@ "EJ": false }, "CharacterListFlags": { - "None": true, "Unk1": false, "OverwriteConfigButton": false, "OneCharacterSlot": false, @@ -50,7 +48,6 @@ "NewFeluccaAreas": false }, "HousingFlags": { - "None": true, "AOS": false, "SE": false, "ML": false, @@ -70,7 +67,6 @@ "ClientVersion": null, "ClientFlags": "Felucca", "FeatureFlags": { - "None": false, "T2A": true, "UOR": false, "UOTD": false, @@ -97,7 +93,6 @@ "EJ": false }, "CharacterListFlags": { - "None": false, "Unk1": false, "OverwriteConfigButton": false, "OneCharacterSlot": false, @@ -116,7 +111,6 @@ "NewFeluccaAreas": false }, "HousingFlags": { - "None": true, "AOS": false, "SE": false, "ML": false, @@ -136,7 +130,6 @@ "ClientVersion": null, "ClientFlags": "Trammel", "FeatureFlags": { - "None": false, "T2A": true, "UOR": true, "UOTD": false, @@ -163,7 +156,6 @@ "EJ": false }, "CharacterListFlags": { - "None": false, "Unk1": false, "OverwriteConfigButton": false, "OneCharacterSlot": false, @@ -182,7 +174,6 @@ "NewFeluccaAreas": false }, "HousingFlags": { - "None": true, "AOS": false, "SE": false, "ML": false, @@ -202,7 +193,6 @@ "ClientVersion": null, "ClientFlags": "Ilshenar", "FeatureFlags": { - "None": false, "T2A": true, "UOR": true, "UOTD": true, @@ -229,7 +219,6 @@ "EJ": false }, "CharacterListFlags": { - "None": false, "Unk1": false, "OverwriteConfigButton": false, "OneCharacterSlot": false, @@ -248,7 +237,6 @@ "NewFeluccaAreas": false }, "HousingFlags": { - "None": true, "AOS": false, "SE": false, "ML": false, @@ -268,7 +256,6 @@ "ClientVersion": null, "ClientFlags": "Ilshenar", "FeatureFlags": { - "None": false, "T2A": true, "UOR": true, "UOTD": true, @@ -295,7 +282,6 @@ "EJ": false }, "CharacterListFlags": { - "None": false, "Unk1": false, "OverwriteConfigButton": false, "OneCharacterSlot": false, @@ -314,7 +300,6 @@ "NewFeluccaAreas": false }, "HousingFlags": { - "None": true, "AOS": false, "SE": false, "ML": false, @@ -334,9 +319,8 @@ "ClientVersion": null, "ClientFlags": "Malas", "FeatureFlags": { - "None": false, - "T2A": false, - "UOR": false, + "T2A": true, + "UOR": true, "UOTD": false, "LBR": true, "AOS": true, @@ -361,7 +345,6 @@ "EJ": false }, "CharacterListFlags": { - "None": false, "Unk1": false, "OverwriteConfigButton": false, "OneCharacterSlot": false, @@ -380,7 +363,6 @@ "NewFeluccaAreas": false }, "HousingFlags": { - "None": false, "AOS": true, "SE": false, "ML": false, @@ -400,9 +382,8 @@ "ClientVersion": null, "ClientFlags": "Tokuno", "FeatureFlags": { - "None": false, - "T2A": false, - "UOR": false, + "T2A": true, + "UOR": true, "UOTD": false, "LBR": true, "AOS": true, @@ -427,7 +408,6 @@ "EJ": false }, "CharacterListFlags": { - "None": false, "Unk1": false, "OverwriteConfigButton": false, "OneCharacterSlot": false, @@ -446,7 +426,6 @@ "NewFeluccaAreas": false }, "HousingFlags": { - "None": false, "AOS": true, "SE": true, "ML": false, @@ -466,9 +445,8 @@ "ClientVersion": "5.0.0a", "ClientFlags": null, "FeatureFlags": { - "None": false, - "T2A": false, - "UOR": false, + "T2A": true, + "UOR": true, "UOTD": false, "LBR": true, "AOS": true, @@ -493,7 +471,6 @@ "EJ": false }, "CharacterListFlags": { - "None": false, "Unk1": false, "OverwriteConfigButton": false, "OneCharacterSlot": false, @@ -512,7 +489,6 @@ "NewFeluccaAreas": false }, "HousingFlags": { - "None": false, "AOS": true, "SE": true, "ML": true, @@ -532,9 +508,8 @@ "ClientVersion": null, "ClientFlags": "TerMur", "FeatureFlags": { - "None": false, - "T2A": false, - "UOR": false, + "T2A": true, + "UOR": true, "UOTD": false, "LBR": true, "AOS": true, @@ -559,7 +534,6 @@ "EJ": false }, "CharacterListFlags": { - "None": false, "Unk1": false, "OverwriteConfigButton": false, "OneCharacterSlot": false, @@ -578,7 +552,6 @@ "NewFeluccaAreas": false }, "HousingFlags": { - "None": false, "AOS": true, "SE": true, "ML": true, @@ -598,9 +571,8 @@ "ClientVersion": "7.0.9.0", "ClientFlags": null, "FeatureFlags": { - "None": false, - "T2A": false, - "UOR": false, + "T2A": true, + "UOR": true, "UOTD": false, "LBR": true, "AOS": true, @@ -625,7 +597,6 @@ "EJ": false }, "CharacterListFlags": { - "None": false, "Unk1": false, "OverwriteConfigButton": false, "OneCharacterSlot": false, @@ -644,7 +615,6 @@ "NewFeluccaAreas": false }, "HousingFlags": { - "None": false, "AOS": true, "SE": true, "ML": true, @@ -664,9 +634,8 @@ "ClientVersion": "7.0.45.65", "ClientFlags": null, "FeatureFlags": { - "None": false, - "T2A": false, - "UOR": false, + "T2A": true, + "UOR": true, "UOTD": false, "LBR": true, "AOS": true, @@ -691,7 +660,6 @@ "EJ": false }, "CharacterListFlags": { - "None": false, "Unk1": false, "OverwriteConfigButton": false, "OneCharacterSlot": false, @@ -710,7 +678,6 @@ "NewFeluccaAreas": false }, "HousingFlags": { - "None": false, "AOS": true, "SE": true, "ML": true, @@ -730,9 +697,8 @@ "ClientVersion": "7.0.61.0", "ClientFlags": null, "FeatureFlags": { - "None": false, - "T2A": false, - "UOR": false, + "T2A": true, + "UOR": true, "UOTD": false, "LBR": true, "AOS": true, @@ -757,7 +723,6 @@ "EJ": true }, "CharacterListFlags": { - "None": false, "Unk1": false, "OverwriteConfigButton": false, "OneCharacterSlot": false, @@ -776,7 +741,6 @@ "NewFeluccaAreas": false }, "HousingFlags": { - "None": false, "AOS": true, "SE": true, "ML": true, diff --git a/Projects/Server/ExpansionInfo.cs b/Projects/Server/ExpansionInfo.cs index 3d9ca5cd5..909658add 100644 --- a/Projects/Server/ExpansionInfo.cs +++ b/Projects/Server/ExpansionInfo.cs @@ -86,7 +86,6 @@ namespace Server ExpansionUOR = ExpansionT2A | UOR, ExpansionUOTD = ExpansionUOR | UOTD, ExpansionLBR = ExpansionUOTD | LBR, - // In later clients, the AOS+ expansions include the Publish 16 LBR flag, but not the previous expansions. ExpansionAOS = LBR | AOS | LiveAccount, ExpansionSE = ExpansionAOS | SE, ExpansionML = ExpansionSE | ML | NinthAge, @@ -159,6 +158,12 @@ namespace Server public class ExpansionInfo { + public static bool ForceOldAnimations { get; private set; } + public static void Configure() + { + ForceOldAnimations = ServerConfiguration.GetSetting("expansion.forceOldAnimations", false); + } + public static string GetEraFolder(string parentDirectory) { var expansion = Core.Expansion; @@ -265,32 +270,6 @@ namespace Server public ClientVersion RequiredClient { get; set; } public HousingFlags CustomHousingFlag { get; set; } - public static FeatureFlags GetFeatures(Expansion ex) - { - var info = GetInfo(ex); - - if (info != null) - { - return info.SupportedFeatures; - } - - return ex switch - { - Expansion.T2A => FeatureFlags.ExpansionT2A, - Expansion.UOR => FeatureFlags.ExpansionUOR, - Expansion.UOTD => FeatureFlags.ExpansionUOTD, - Expansion.LBR => FeatureFlags.ExpansionLBR, - Expansion.AOS => FeatureFlags.ExpansionAOS, - Expansion.SE => FeatureFlags.ExpansionSE, - Expansion.ML => FeatureFlags.ExpansionML, - Expansion.SA => FeatureFlags.ExpansionSA, - Expansion.HS => FeatureFlags.ExpansionHS, - Expansion.TOL => FeatureFlags.ExpansionTOL, - Expansion.EJ => FeatureFlags.EJ, - _ => FeatureFlags.ExpansionNone - }; - } - public static ExpansionInfo GetInfo(Expansion ex) => GetInfo((int)ex); public static ExpansionInfo GetInfo(int ex) diff --git a/Projects/Server/Json/Converters/FlagsConverter.cs b/Projects/Server/Json/Converters/FlagsConverter.cs index 38584d05a..b174e6681 100644 --- a/Projects/Server/Json/Converters/FlagsConverter.cs +++ b/Projects/Server/Json/Converters/FlagsConverter.cs @@ -100,16 +100,17 @@ namespace Server.Json { writer.WriteStartObject(); var underlyingType = Enum.GetUnderlyingType(typeof(T)); - var size = GetUnderlyingTypeLength(Type.GetTypeCode(underlyingType)) - 1; var intValue = ConvertToUInt64(underlyingType, value); foreach (var flagName in Enum.GetNames(typeof(T))) { var flagValue = Enum.Parse(flagName, false); var flag = ConvertToUInt64(underlyingType, flagValue); - if (flag == 0 || (flag & size) == 0) + + // Do not write out multi-bit values. This is a custom behavior + if (flag > 0 && (flag & (flag - 1)) == 0) { - writer.WriteBoolean(flagName, (intValue & flag) != 0); + writer.WriteBoolean(flagName, (intValue & flag) == flag); } } diff --git a/Projects/Server/Network/Packets/OutgoingAccountPackets.cs b/Projects/Server/Network/Packets/OutgoingAccountPackets.cs index 8e6e56d32..59e6db66e 100644 --- a/Projects/Server/Network/Packets/OutgoingAccountPackets.cs +++ b/Projects/Server/Network/Packets/OutgoingAccountPackets.cs @@ -160,6 +160,11 @@ public static class OutgoingAccountPackets } } + if (ExpansionInfo.ForceOldAnimations) + { + flags &= ~FeatureFlags.LBR; + } + var length = ns.ExtendedSupportedFeatures ? 5 : 3; var writer = new SpanWriter(stackalloc byte[length]); writer.Write((byte)0xB9); // Packet ID