fix: Fixes expansion flags for animations (#1009)
This commit is contained in:
parent
d1a3c9b0c7
commit
8f1240d25e
4 changed files with 29 additions and 80 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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<T>(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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue