+ Update ignores.

+ Refactor ExpansionInfo.CurrentExpansion to ExpansionInfo.CoreExpansion.
+ Add HousingFlags enum for more intuitive use when defining expansions.

+ Corrected housing flags values; 
* I may be wrong, but the comments suggest that the OR'd flags are not actually equal to the values used when defining custom housing flags in each expansion. The defined values seem to indecate that a mixture of CharacterListFlags and FeatureFlags were used - possibly as a mistake.
This commit is contained in:
Vorspire 2015-09-01 22:45:50 +01:00
parent ce239194ff
commit 08efcda2a9
3 changed files with 207 additions and 95 deletions

View file

@ -45,7 +45,7 @@ namespace Server.Multis
if (val == -1)
return false;
return (val == 0 || (ExpansionInfo.CurrentExpansion.CustomHousingFlag & val) != 0);
return (val == 0 || ((uint)ExpansionInfo.CoreExpansion.CustomHousingFlag & val) != 0);
}
private int[] CreateTable(int length)

View file

@ -12,7 +12,7 @@ namespace Server
{
public enum Expansion
{
None,
None = 0,
T2A,
UOR,
UOTD,
@ -22,7 +22,7 @@ namespace Server
ML,
SA,
HS,
TOL
TOL
}
[Flags]
@ -41,7 +41,7 @@ namespace Server
}
[Flags]
public enum FeatureFlags
public enum FeatureFlags : uint
{
None = 0x00000000,
T2A = 0x00000001,
@ -55,7 +55,7 @@ namespace Server
EigthAge = 0x00000100,
NinthAge = 0x00000200, /* Crystal/Shadow Custom House Tiles */
TenthAge = 0x00000400,
InceasedStorage = 0x00000800, /* Increased Housing/Bank Storage */
IncreasedStorage = 0x00000800, /* Increased Housing/Bank Storage */
SeventhCharacterSlot = 0x00001000,
RoleplayFaces = 0x00002000,
TrialAccount = 0x00004000,
@ -64,10 +64,9 @@ namespace Server
HS = 0x00020000,
Gothic = 0x00040000,
Rustic = 0x00080000,
Jungle = 0x100000,
Shadowguard = 0x200000,
TOL = 0x400000,
Jungle = 0x00100000,
Shadowguard = 0x00200000,
TOL = 0x00400000,
ExpansionNone = None,
ExpansionT2A = T2A,
@ -79,7 +78,7 @@ namespace Server
ExpansionML = ExpansionSE | ML | NinthAge,
ExpansionSA = ExpansionML | SA | Gothic | Rustic,
ExpansionHS = ExpansionSA | HS,
ExpansionTOL = ExpansionHS | TOL | Jungle | Shadowguard
ExpansionTOL = ExpansionHS | TOL | Jungle | Shadowguard
}
[Flags]
@ -113,92 +112,159 @@ namespace Server
ExpansionML = ExpansionSE | ML,
ExpansionSA = ExpansionML,
ExpansionHS = ExpansionSA,
ExpansionTOL = ExpansionHS
ExpansionTOL = ExpansionHS
}
[Flags]
public enum HousingFlags : uint
{
None = 0x0,
AOS = 0x10,
SE = 0x40,
ML = 0x80,
Crystal = 0x200,
SA = 0x10000,
HS = 0x20000,
Gothic = 0x40000,
Rustic = 0x80000,
Jungle = 0x100000,
Shadowguard = 0x200000,
TOL = 0x400000,
HousingAOS = AOS,
HousingSE = HousingAOS | SE,
HousingML = HousingSE | ML | Crystal,
HousingSA = HousingML | SA | Gothic | Rustic,
HousingHS = HousingSA | HS,
HousingTOL = HousingHS | TOL | Jungle | Shadowguard
}
public class ExpansionInfo
{
public static ExpansionInfo[] Table { get { return m_Table; } }
public static ExpansionInfo CoreExpansion { get { return GetInfo(Core.Expansion); } }
private static readonly ExpansionInfo[] m_Table = new[]
public static ExpansionInfo[] Table { get; private set; }
static ExpansionInfo()
{
new ExpansionInfo(0, "None", ClientFlags.None, FeatureFlags.ExpansionNone, CharacterListFlags.ExpansionNone, 0x0000),
new ExpansionInfo(
1, "The Second Age", ClientFlags.Felucca, FeatureFlags.ExpansionT2A, CharacterListFlags.ExpansionT2A, 0x0000),
new ExpansionInfo(
2, "Renaissance", ClientFlags.Trammel, FeatureFlags.ExpansionUOR, CharacterListFlags.ExpansionUOR, 0x0000),
new ExpansionInfo(
3, "Third Dawn", ClientFlags.Ilshenar, FeatureFlags.ExpansionUOTD, CharacterListFlags.ExpansionUOTD, 0x0000),
new ExpansionInfo(
4, "Blackthorn's Revenge", ClientFlags.Ilshenar, FeatureFlags.ExpansionLBR, CharacterListFlags.ExpansionLBR, 0x0000)
,
new ExpansionInfo(
5, "Age of Shadows", ClientFlags.Malas, FeatureFlags.ExpansionAOS, CharacterListFlags.ExpansionAOS, 0x0000),
new ExpansionInfo(
6, "Samurai Empire", ClientFlags.Tokuno, FeatureFlags.ExpansionSE, CharacterListFlags.ExpansionSE, 0x00C0),
// 0x20 | 0x80
new ExpansionInfo(
7, "Mondain's Legacy", new ClientVersion("5.0.0a"), FeatureFlags.ExpansionML, CharacterListFlags.ExpansionML, 0x02C0)
, // 0x20 | 0x80 | 0x200
new ExpansionInfo(
8, "Stygian Abyss", ClientFlags.TerMur, FeatureFlags.ExpansionSA, CharacterListFlags.ExpansionSA, 0xD02C0),
// 0x20 | 0x80 | 0x200 | 0x10000 | 0x40000 | 0x80000
new ExpansionInfo(
9, "High Seas", new ClientVersion("7.0.9.0"), FeatureFlags.ExpansionHS, CharacterListFlags.ExpansionHS, 0xD02C0),
// 0x20 | 0x80 | 0x200 | 0x10000 | 0x40000 | 0x80000
new ExpansionInfo(
10, "Time of Legends", new ClientVersion("7.0.45.65"), FeatureFlags.ExpansionTOL, CharacterListFlags.ExpansionTOL, 0x4060FB)
// 0x20 | 0x80 | 0x200 | 0x10000 | 0x40000 | 0x100000 | 0x200000 | 0x400000
};
private readonly string m_Name;
private readonly int m_ID;
private readonly int m_CustomHousingFlag;
private readonly ClientFlags m_ClientFlags;
private readonly FeatureFlags m_SupportedFeatures;
private readonly CharacterListFlags m_CharListFlags;
private readonly ClientVersion m_RequiredClient; // Used as an alternative to the flags
public string Name { get { return m_Name; } }
public int ID { get { return m_ID; } }
public ClientFlags ClientFlags { get { return m_ClientFlags; } }
public FeatureFlags SupportedFeatures { get { return m_SupportedFeatures; } }
public CharacterListFlags CharacterListFlags { get { return m_CharListFlags; } }
public int CustomHousingFlag { get { return m_CustomHousingFlag; } }
public ClientVersion RequiredClient { get { return m_RequiredClient; } }
public ExpansionInfo(
int id,
string name,
ClientFlags clientFlags,
FeatureFlags supportedFeatures,
CharacterListFlags charListFlags,
int customHousingFlag)
{
m_Name = name;
m_ID = id;
m_ClientFlags = clientFlags;
m_SupportedFeatures = supportedFeatures;
m_CharListFlags = charListFlags;
m_CustomHousingFlag = customHousingFlag;
Table = new[]
{
new ExpansionInfo(
0,
"None",
ClientFlags.None,
FeatureFlags.ExpansionNone,
CharacterListFlags.ExpansionNone,
HousingFlags.None),
new ExpansionInfo(
1,
"The Second Age",
ClientFlags.Felucca,
FeatureFlags.ExpansionT2A,
CharacterListFlags.ExpansionT2A,
HousingFlags.None),
new ExpansionInfo(
2,
"Renaissance",
ClientFlags.Trammel,
FeatureFlags.ExpansionUOR,
CharacterListFlags.ExpansionUOR,
HousingFlags.None),
new ExpansionInfo(
3,
"Third Dawn",
ClientFlags.Ilshenar,
FeatureFlags.ExpansionUOTD,
CharacterListFlags.ExpansionUOTD,
HousingFlags.None),
new ExpansionInfo(
4,
"Blackthorn's Revenge",
ClientFlags.Ilshenar,
FeatureFlags.ExpansionLBR,
CharacterListFlags.ExpansionLBR,
HousingFlags.None),
new ExpansionInfo(
5,
"Age of Shadows",
ClientFlags.Malas,
FeatureFlags.ExpansionAOS,
CharacterListFlags.ExpansionAOS,
HousingFlags.HousingAOS),
new ExpansionInfo(
6,
"Samurai Empire",
ClientFlags.Tokuno,
FeatureFlags.ExpansionSE,
CharacterListFlags.ExpansionSE,
HousingFlags.HousingSE),
new ExpansionInfo(
7,
"Mondain's Legacy",
new ClientVersion("5.0.0a"),
FeatureFlags.ExpansionML,
CharacterListFlags.ExpansionML,
HousingFlags.HousingML),
new ExpansionInfo(
8,
"Stygian Abyss",
ClientFlags.TerMur,
FeatureFlags.ExpansionSA,
CharacterListFlags.ExpansionSA,
HousingFlags.HousingSA),
new ExpansionInfo(
9,
"High Seas",
new ClientVersion("7.0.9.0"),
FeatureFlags.ExpansionHS,
CharacterListFlags.ExpansionHS,
HousingFlags.HousingHS),
new ExpansionInfo(
10,
"Time of Legends",
new ClientVersion("7.0.45.65"),
FeatureFlags.ExpansionTOL,
CharacterListFlags.ExpansionTOL,
HousingFlags.HousingTOL)
};
}
public ExpansionInfo(
int id,
string name,
ClientVersion requiredClient,
FeatureFlags supportedFeatures,
CharacterListFlags charListFlags,
int customHousingFlag)
public static FeatureFlags GetFeatures(Expansion ex)
{
m_Name = name;
m_ID = id;
m_SupportedFeatures = supportedFeatures;
m_CharListFlags = charListFlags;
m_CustomHousingFlag = customHousingFlag;
m_RequiredClient = requiredClient;
var info = GetInfo(ex);
if (info != null)
{
return info.SupportedFeatures;
}
switch (ex)
{
case Expansion.None:
return FeatureFlags.ExpansionNone;
case Expansion.T2A:
return FeatureFlags.ExpansionT2A;
case Expansion.UOR:
return FeatureFlags.ExpansionUOR;
case Expansion.UOTD:
return FeatureFlags.ExpansionUOTD;
case Expansion.LBR:
return FeatureFlags.ExpansionLBR;
case Expansion.AOS:
return FeatureFlags.ExpansionAOS;
case Expansion.SE:
return FeatureFlags.ExpansionSE;
case Expansion.ML:
return FeatureFlags.ExpansionML;
case Expansion.SA:
return FeatureFlags.ExpansionSA;
case Expansion.HS:
return FeatureFlags.ExpansionHS;
case Expansion.TOL:
return FeatureFlags.ExpansionTOL;
}
return FeatureFlags.ExpansionNone;
}
public static ExpansionInfo GetInfo(Expansion ex)
@ -208,21 +274,67 @@ namespace Server
public static ExpansionInfo GetInfo(int ex)
{
int v = ex;
var v = ex;
if (v < 0 || v >= m_Table.Length)
if (v < 0 || v >= Table.Length)
{
v = 0;
}
return m_Table[v];
return Table[v];
}
public static ExpansionInfo CurrentExpansion { get { return GetInfo(Core.Expansion); } }
public int ID { get; private set; }
public string Name { get; set; }
public ClientFlags ClientFlags { get; set; }
public FeatureFlags SupportedFeatures { get; set; }
public CharacterListFlags CharacterListFlags { get; set; }
public ClientVersion RequiredClient { get; set; }
public HousingFlags CustomHousingFlag { get; set; }
public ExpansionInfo(
int id,
string name,
ClientFlags clientFlags,
FeatureFlags supportedFeatures,
CharacterListFlags charListFlags,
HousingFlags customHousingFlag)
: this(id, name, supportedFeatures, charListFlags, customHousingFlag)
{
ClientFlags = clientFlags;
}
public ExpansionInfo(
int id,
string name,
ClientVersion requiredClient,
FeatureFlags supportedFeatures,
CharacterListFlags charListFlags,
HousingFlags customHousingFlag)
: this(id, name, supportedFeatures, charListFlags, customHousingFlag)
{
RequiredClient = requiredClient;
}
private ExpansionInfo(
int id,
string name,
FeatureFlags supportedFeatures,
CharacterListFlags charListFlags,
HousingFlags customHousingFlag)
{
ID = id;
Name = name;
SupportedFeatures = supportedFeatures;
CharacterListFlags = charListFlags;
CustomHousingFlag = customHousingFlag;
}
public override string ToString()
{
return m_Name;
return Name;
}
}
}

View file

@ -3157,7 +3157,7 @@ m_Stream.Write( (int) renderMode );
public SupportedFeatures(NetState ns)
: base(0xB9, ns.ExtendedSupportedFeatures ? 5 : 3)
{
FeatureFlags flags = ExpansionInfo.CurrentExpansion.SupportedFeatures;
FeatureFlags flags = ExpansionInfo.CoreExpansion.SupportedFeatures;
flags |= m_AdditionalFlags;
@ -4540,7 +4540,7 @@ m_Stream.Write( (int) renderMode );
m_Stream.Write(0);
}
CharacterListFlags flags = ExpansionInfo.CurrentExpansion.CharacterListFlags;
CharacterListFlags flags = ExpansionInfo.CoreExpansion.CharacterListFlags;
if (count > 6)
{
@ -4644,7 +4644,7 @@ m_Stream.Write( (int) renderMode );
m_Stream.WriteAsciiFixed(ci.Building, 31);
}
CharacterListFlags flags = ExpansionInfo.CurrentExpansion.CharacterListFlags;
CharacterListFlags flags = ExpansionInfo.CoreExpansion.CharacterListFlags;
if (count > 6)
{