* Fixes a bug with the main loop. Removes unnecessary optimizations for RDRand. * WIP - Rewriting packets. * Cleanup and updates README * Converts more packets * Fixes header * Converts Effects packets. * Forgot the send command * Adds the start of containers packets. * Adds message packets with caching * Extends the send methods * Starts to add Acquire methods * Converted the packets * Cleanup * Cleanup * Adds more packets * Adds more packets * Fixes clearing arrays from pool. Adds Mobile Incoming * Converts more packets. * Moves more packets * Moves more packets * Test compression * Merges * Migrating to an idiomatic syntax that also supports compression, and proxying. * Optimize the stack alloc. Changes attributes * Converted container packets * Visual Studio doesn't auto save files. I am still getting used to subpar IDEs. * Adds static packet caching. Will profile later. Converts more packets * Fixes packets and changes how compression is configured * WIP - Adds basics for Gumps. Not finished though. * Fix file * Fixes formatting * Changed SpanWriter to be more idiomatic. * Fixes Span vs RawSpan and missing stackallocs * Converts over some more gumps * WIP - Deletes 32bit support. * Drops RDRand32 support. * Fixes gump compilation * Converting gump components * Removes old huffman compression function * Revert signature for backwards compatibility * WIP - Converting more gump components * Creates ArraySet for the strings. Updates AppendTo to reference that. * Converts the maining gump components * Cleans up gump components * Cleans up directives * Cleans up ArraySet and moves it. Adds null-coalescing-assignment * Cleanup, Target Packets, and C# 8 changes. * Removed OPL Packet * World packets * Fixing packet uses * Cleans up code. Fixes packet uses in various places. * More cleanup for packets * Code cleanup * Converts more packet uses and cleans up more code * More code cleanup * Finishes fixing the packets in Item * Updates secure trade packets * Updates core and gets it to compile. * Moved packets to scripts. Fixed account handler use of packets * Code cleanup * Updates chat packets * Code cleanuo * Adds party packets, but need to implement them. * Party packets WIP * Finishes party packets * Rearrange movement namespaces and classes * Finishes plant packets * Code Formatting * Fixes moving effects * Code cleanup, eliminates equipinfo * Adds more packets. Fixes bugs with various packets. * Finishes mahjon packets * Fixes mahjong packet * Code cleanup * Finishes mahjong packets * Adds Map packets * Add multifacet maps and charts * Cleans up some packets with UTF8 * Optimizes packets * Cleans up more packets. Moves the MessageHelper * Removes assistant support. Removes extended protocol. Incorporates MapUO packets as normal packets. * Updates protocol extensions packet receiver * Fixes a few bugs. Fixes a few more packets. * Code cleanup and fixing more packets * Fixes packet effects * Cleaned up more code * Buff Icon cleanup * Removed unused constructors * Code Cleanup. Adds BoatHS Packets * Moves house files. Updates house foundation packets. * Deployment cleanup * Fixes: * Code cleanup * More code cleanup * More code cleanup * Cleaned up BaseHouse * Enforces styling * Converts foreach to linq where possible. * Dont need that * Goals/Readme updates * Removes 32bit support at the highest level. Turns on HRT by default. * Code cleanup. Fixes extended features packet. * Fixes various bugs * Code cleanup * Code cleanup * Code cleanup. Fixes gump X/Y assignment. * Code cleanup using |= operator * More code cleanup * Cleanup * Fixes spacing issues. Thanks Visual Studio. You suck. * Compiler error * Fixes NPE from RunUO 2.7 * Renames ScriptCompiler to AssemblyHandler. Fixes packets. Updates README * Fixes more packets. Stupid trailing nulls. * Fixes various bugs. * Fixes for gumps * Fixes more gump stuff. Going to split it out later since it is getting insane * Recoded the gump writing * WIP * *Added output path of scripts project to dev branch *Activated debugging in code
325 lines
9.1 KiB
C#
325 lines
9.1 KiB
C#
/***************************************************************************
|
|
* ExpansionInfo.cs
|
|
* -------------------
|
|
* begin : May 1, 2002
|
|
* copyright : (C) The RunUO Software Team
|
|
* email : info@runuo.com
|
|
*
|
|
* $Id$
|
|
*
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
***************************************************************************/
|
|
|
|
using System;
|
|
|
|
namespace Server
|
|
{
|
|
public enum Expansion
|
|
{
|
|
None,
|
|
T2A,
|
|
UOR,
|
|
UOTD,
|
|
LBR,
|
|
AOS,
|
|
SE,
|
|
ML,
|
|
SA,
|
|
HS,
|
|
TOL
|
|
}
|
|
|
|
[Flags]
|
|
public enum ClientFlags
|
|
{
|
|
None = 0x00000000,
|
|
Felucca = 0x00000001,
|
|
Trammel = 0x00000002,
|
|
Ilshenar = 0x00000004,
|
|
Malas = 0x00000008,
|
|
Tokuno = 0x00000010,
|
|
TerMur = 0x00000020,
|
|
Unk1 = 0x00000040,
|
|
Unk2 = 0x00000080,
|
|
UOTD = 0x00000100
|
|
}
|
|
|
|
[Flags]
|
|
public enum FeatureFlags
|
|
{
|
|
None = 0x00000000,
|
|
T2A = 0x00000001,
|
|
UOR = 0x00000002,
|
|
UOTD = 0x00000004,
|
|
LBR = 0x00000008,
|
|
AOS = 0x00000010,
|
|
SixthCharacterSlot = 0x00000020,
|
|
SE = 0x00000040,
|
|
ML = 0x00000080,
|
|
EigthAge = 0x00000100,
|
|
NinthAge = 0x00000200, /* Crystal/Shadow Custom House Tiles */
|
|
TenthAge = 0x00000400,
|
|
IncreasedStorage = 0x00000800, /* Increased Housing/Bank Storage */
|
|
SeventhCharacterSlot = 0x00001000,
|
|
RoleplayFaces = 0x00002000,
|
|
TrialAccount = 0x00004000,
|
|
LiveAccount = 0x00008000,
|
|
|
|
SA = 0x00010000,
|
|
HS = 0x00020000,
|
|
Gothic = 0x00040000,
|
|
Rustic = 0x00080000,
|
|
Jungle = 0x00100000,
|
|
Shadowguard = 0x00200000,
|
|
TOL = 0x00400000,
|
|
|
|
ExpansionNone = None,
|
|
ExpansionT2A = T2A,
|
|
ExpansionUOR = ExpansionT2A | UOR,
|
|
ExpansionUOTD = ExpansionUOR | UOTD,
|
|
ExpansionLBR = ExpansionUOTD | LBR,
|
|
ExpansionAOS = ExpansionLBR | AOS | LiveAccount,
|
|
ExpansionSE = ExpansionAOS | SE,
|
|
ExpansionML = ExpansionSE | ML | NinthAge,
|
|
ExpansionSA = ExpansionML | SA | Gothic | Rustic,
|
|
ExpansionHS = ExpansionSA | HS,
|
|
ExpansionTOL = ExpansionHS | TOL | Jungle | Shadowguard
|
|
}
|
|
|
|
[Flags]
|
|
public enum CharacterListFlags
|
|
{
|
|
None = 0x00000000,
|
|
Unk1 = 0x00000001,
|
|
OverwriteConfigButton = 0x00000002,
|
|
OneCharacterSlot = 0x00000004,
|
|
ContextMenus = 0x00000008,
|
|
SlotLimit = 0x00000010,
|
|
AOS = 0x00000020,
|
|
SixthCharacterSlot = 0x00000040,
|
|
SE = 0x00000080,
|
|
ML = 0x00000100,
|
|
Unk2 = 0x00000200,
|
|
UO3DClientType = 0x00000400,
|
|
Unk3 = 0x00000800,
|
|
SeventhCharacterSlot = 0x00001000,
|
|
Unk4 = 0x00002000,
|
|
NewMovementSystem = 0x00004000,
|
|
NewFeluccaAreas = 0x00008000,
|
|
|
|
ExpansionNone = ContextMenus, //
|
|
ExpansionT2A = ContextMenus, //
|
|
ExpansionUOR = ContextMenus, // None
|
|
ExpansionUOTD = ContextMenus, //
|
|
ExpansionLBR = ContextMenus, //
|
|
ExpansionAOS = ContextMenus | AOS,
|
|
ExpansionSE = ExpansionAOS | SE,
|
|
ExpansionML = ExpansionSE | ML,
|
|
ExpansionSA = ExpansionML,
|
|
ExpansionHS = ExpansionSA,
|
|
ExpansionTOL = ExpansionHS
|
|
}
|
|
|
|
[Flags]
|
|
public enum HousingFlags
|
|
{
|
|
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
|
|
{
|
|
static ExpansionInfo()
|
|
{
|
|
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,
|
|
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 static ExpansionInfo CoreExpansion => GetInfo(Core.Expansion);
|
|
|
|
public static ExpansionInfo[] Table{ get; }
|
|
|
|
public int ID{ get; }
|
|
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 static FeatureFlags GetFeatures(Expansion ex)
|
|
{
|
|
ExpansionInfo info = GetInfo(ex);
|
|
|
|
if (info != null) return info.SupportedFeatures;
|
|
|
|
return ex switch
|
|
{
|
|
Expansion.None => FeatureFlags.ExpansionNone,
|
|
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,
|
|
_ => FeatureFlags.ExpansionNone
|
|
};
|
|
}
|
|
|
|
public static ExpansionInfo GetInfo(Expansion ex) => GetInfo((int)ex);
|
|
|
|
public static ExpansionInfo GetInfo(int ex)
|
|
{
|
|
int v = ex;
|
|
|
|
if (v < 0 || v >= Table.Length) v = 0;
|
|
|
|
return Table[v];
|
|
}
|
|
|
|
public override string ToString() => Name;
|
|
}
|
|
}
|