> [!Note]
> **Developer Note**
> Now developers will only need to build/run the Application project instead of everything.
> When adding new projects, make sure to:
> 1. Add a reference to that project in the Application project.
> 2. Add the dll file to the Distribution/Data/assemblies.json file
### Summary
- Adds an application project
- Consolidates process restarts to use `Core.Kill(true)`
- Removes some old messaging, for example processor optimization
- Fixes missing build cleanup
- [X] Replace serialization generator with nuget
- [X] Replace schema migration with dotnet bool
- [X] Add ability to run migrations in VS/Rider using a project build
Roslyn Source generators are not supposed to access I/O. To get around this we have to use `AdditionalFiles` to give the analyzer access to read/load the schema files.
To write the schema files we have to use a separate program altogether.
- [X] Adds SerializationSchemaGenerator
- [X] Splits out the SerializationGenerator code
### Features
* Fully abstracts serialization by using compile-time attributes.
* Supports serializing the following:
- Primitives (integers, strings, etc)
- IP Addresses
- BigDecimal
- DateTime, Delta DateTimes
- TimeSpan
- Server.Race
- Server.Map
- Point2D, Point3D, Rect2D, Rect3D
- Existing/New `ISerializable` references
- Lists/Sets of serializable types
- Type with a `Serialize` method and constructor that takes an `IGenericReader`
* Supports forward-only migration
* Supports existing RunUO deserialization for older versions by changing to the following signature:
- `public void OldDeserialize(IGenericReader reader, int version)`
- Must remove deserializing the version since this is already done
* Supports serializing from private fields or custom made properties.
* Types do not require inheriting Item/Mobile. Code gen will fully create `ISerializable` information.
- This is not recommended yet, since it requires wiring to `Persistence` which will cause lots of unresolved symbol errors until code gen is built.
### Example
```cs
using System.Collections.Generic;
namespace Server.Items
{
[Serializable(1)]
public partial class TestItem1 : Item
{
[SerializableField(1)]
[SerializableFieldAttr("[CommandProperty(AccessLevel.Administrator)]")]
private List<Item> _someProperty;
private void Deserialize(IGenericReader reader, int version)
{
}
}
}
```
Generates this:
```cs
namespace Server.Items
{
public partial class TestItem1
{
#pragma warning disable 0414
private const int _version = 1;
#pragma warning restore 0414
[CommandProperty(AccessLevel.Administrator)]
public System.Collections.Generic.List<Server.Item> SomeProperty
{
get => _someProperty;
set
{
if (value != _someProperty)
{
((ISerializable)this).MarkDirty();
_someProperty = value;
}
}
}
public TestItem1(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
var savePosition = ((Server.ISerializable)this).SavePosition;
if (savePosition > -1)
{
writer.Seek(savePosition, System.IO.SeekOrigin.Begin);
return;
}
writer.WriteEncodedInt(_version);
writer.Write(_someProperty);
}
public override void Deserialize(IGenericReader reader)
{
var version = reader.ReadEncodedInt();
if (version < 1)
{
OldDeserialize(reader, version);
((Server.ISerializable)this).MarkDirty();
return;
}
SomeProperty = reader.ReadEntityList<Server.Item>();
}
}
}
```
And this:
```json
{
"version": 1,
"type": "TestItem1",
"properties": [
{
"name": "SomeProperty",
"type": "System.Collections.Generic.List\u003CServer.Item\u003E",
"rule": "ListMigrationRule",
"ruleArguments": [
"Server.Item",
"SerializableInterfaceMigrationRule"
]
}
]
}
```
- [X] Fixes map issues at New Haven by turning off static diffs
- [X] Some code cleanup and reformatting of tile matrix, tile matrix patch, and tile data
- [X] Adds NetState.Flush for generating spawners so it doesn't feel like the server is frozen
- [X] Reverts NativeReader changes from a while back.
- [X] Adds more string reading for BufferReader.
Notes:
BufferReader is still `little endian` compared to `SpanReader` which is `big endian` (for packets). To that end, the RunUO deserialization `ReadString()` was made obsolete since it is ambiguous, and contains extra fields other than simply reading a string. Furthermore, we shouldn't be using UTF8 (for now) since it is slow.
* 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