diff --git a/README.md b/README.md index 2184b2181..4108f12c9 100644 --- a/README.md +++ b/README.md @@ -9,22 +9,22 @@ ModernUO [![Discord](https://img.shields.io/discord/751317910504603701?logo=disc [![GitHub license](https://img.shields.io/github/license/modernuo/ModernUO?color=blue)](https://github.com/modernuo/ModernUO/blob/master/LICENSE) [![GitHub stars](https://img.shields.io/github/stars/modernuo/ModernUO?logo=github&style=flat)](https://github.com/modernuo/ModernUO/stargazers) [![GitHub issues](https://img.shields.io/github/issues/modernuo/ModernUO?logo=github)](https://github.com/modernuo/ModernUO/issues) -
+
[![GitHub build](https://img.shields.io/github/actions/workflow/status/modernuo/ModernUO/build-test.yml?branch=main&logo=github)](https://github.com/modernuo/ModernUO/actions) [![Azure Pipelines build](https://dev.azure.com/modernuo/modernuo/_apis/build/status/Build?branchName=main)](https://dev.azure.com/modernuo/modernuo/_build/latest?definitionId=1&branchName=main) ## Requirements #### Supported Operating Systems -[![Windows 10/11/2019/2022](https://img.shields.io/badge/-server%202022-3c78d5?labelColor=222222&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHJvbGU9ImltZyIgdmlld0JveD0iMCAwIDI0IDI0Ij48dGl0bGU+V2luZG93czwvdGl0bGU+PHBhdGggZD0iTTAsMEgxMS4zNzdWMTEuMzcySDBaTTEyLjYyMywwSDI0VjExLjM3MkgxMi42MjNaTTAsMTIuNjIzSDExLjM3N1YyNEgwWm0xMi42MjMsMEgyNFYyNEgxMi42MjMiIGZpbGw9IiMzYzc4ZDUiLz48L3N2Zz4=)](https://www.microsoft.com/en-US/evalcenter/evaluate-windows-server-2022) -![MacOS 13+](https://img.shields.io/badge/-sonoma-222222?logo=apple&logoColor=white&labelColor=222222) -[![Debian 11+](https://img.shields.io/badge/-bookworm-A81D33?logo=debian&logoColor=A81D33&labelColor=222222)](https://www.debian.org/distrib/) -[![Ubuntu 20+ LTS](https://img.shields.io/badge/-22LTS-E95420?logo=ubuntu&logoColor=E95420&labelColor=222222)](https://ubuntu.com/download/server) -
-[![Alpine 3.18+](https://img.shields.io/badge/-3.18-0D597F?logo=alpinelinux&logoColor=0D597F&labelColor=222222)](https://alpinelinux.org/downloads/) +[![Windows 11/2019/2022/2025](https://img.shields.io/badge/-server%202025-3c78d5?labelColor=222222&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHJvbGU9ImltZyIgdmlld0JveD0iMCAwIDI0IDI0Ij48dGl0bGU+V2luZG93czwvdGl0bGU+PHBhdGggZD0iTTAsMEgxMS4zNzdWMTEuMzcySDBaTTEyLjYyMywwSDI0VjExLjM3MkgxMi42MjNaTTAsMTIuNjIzSDExLjM3N1YyNEgwWm0xMi42MjMsMEgyNFYyNEgxMi42MjMiIGZpbGw9IiMzYzc4ZDUiLz48L3N2Zz4=)](https://www.microsoft.com/en-US/evalcenter/evaluate-windows-server-2022) +![MacOS 13+](https://img.shields.io/badge/-sequoia-222222?logo=apple&logoColor=white&labelColor=222222) +[![Debian 12+](https://img.shields.io/badge/-bookworm-A81D33?logo=debian&logoColor=A81D33&labelColor=222222)](https://www.debian.org/distrib/) +[![Ubuntu 22+ LTS](https://img.shields.io/badge/-22LTS-E95420?logo=ubuntu&logoColor=E95420&labelColor=222222)](https://ubuntu.com/download/server) +
+[![Alpine 3.19+](https://img.shields.io/badge/-3.21-0D597F?logo=alpinelinux&logoColor=0D597F&labelColor=222222)](https://alpinelinux.org/downloads/) [![Fedora 40+](https://img.shields.io/badge/-40-51a2da?logo=fedora&logoColor=51a2da&labelColor=222222)](https://getfedora.org/en/server/download/) [![RedHat 8+](https://img.shields.io/badge/-8-BE0000?logo=redhat&logoColor=BE0000&labelColor=222222)](https://access.redhat.com/downloads) -[![CentOS 9](https://img.shields.io/badge/-9-262577?logo=centos&logoColor=white&labelColor=222222)](https://www.centos.org/download/) -[![openSUSE 15+](https://img.shields.io/badge/-15-73BA25?logo=openSUSE&logoColor=73BA25&labelColor=222222)](https://get.opensuse.org/) +[![CentOS Stream 8+](https://img.shields.io/badge/-stream_8-262577?logo=centos&logoColor=white&labelColor=222222)](https://www.centos.org/download/) +[![openSUSE 15.5+](https://img.shields.io/badge/-15.5-73BA25?logo=openSUSE&logoColor=73BA25&labelColor=222222)](https://get.opensuse.org/) [![SUSE Enterprise 12 SP2+](https://img.shields.io/badge/-12%20SP2-0C322C?logo=suse&logoColor=30BA78&labelColor=222222)](https://www.suse.com/download/sles/) [![Linux Mint 17+](https://img.shields.io/badge/-20-87CF3E?logo=linux%20mint&logoColor=87CF3E&labelColor=222222)](https://linuxmint.com/download.php) [![Arch](https://img.shields.io/badge/-Arch-1793D1?logo=archlinux&logoColor=1793D1&labelColor=222222)](https://archlinux.org/download/) @@ -38,19 +38,16 @@ ModernUO [![Discord](https://img.shields.io/discord/751317910504603701?logo=disc #### Development [![git](https://img.shields.io/badge/-git-F05032?logo=git&logoColor=F05032&labelColor=222222)](https://git-scm.com/downloads) -[![.NET](https://img.shields.io/badge/-%209.0.101%20SDK-5C2D91?logo=.NET&logoColor=white&labelColor=222222)](https://dotnet.microsoft.com/download/dotnet/9.0) +[![.NET](https://img.shields.io/badge/-%209.0.303%20SDK-5C2D91?logo=.NET&logoColor=white&labelColor=222222)](https://dotnet.microsoft.com/download/dotnet/9.0) #### Supported IDEs - -

Jetbrains Rider 2024.3+spaceVSCodespaceVisual Studio 2022 v17.12+

+

+ Jetbrains Rider 2025+ + space + VSCode + space + Visual Studio 2022 v17.12+ +

## Getting Started - Install prerequisite [requirements](https://github.com/modernuo/ModernUO#requirements) @@ -60,9 +57,9 @@ ModernUO [![Discord](https://img.shields.io/discord/751317910504603701?logo=disc ## Building/Publishing - Run `./publish.cmd [release|debug (default: release)] [os] [arch (default: x64)]` - - `os` - [Supported operating systems](https://github.com/dotnet/core/blob/main/release-notes/7.0/supported-os.md) - - `win` - Windows 10/11/2019/2022 - - `osx` - MacOS 12/13/14 (Sonoma, Big Sur, Monterey) + - `os` - [Supported operating systems](https://github.com/dotnet/core/blob/main/release-notes/9.0/supported-os.md) + - `win` - Windows 10/11/2019/2022/2025 + - `osx` - MacOS 13/14/15 (Sequoia, Sonoma, Big Sur) - `linux` - Linux - `arch` - `x64` - Intel 64-bit @@ -107,7 +104,7 @@ Thank you for supporting us! You can find out how by visiting the [sponsors](./S - [Voxpire](https://github.com/Voxpire), the ServUO Team & Community - [Karasho](https://github.com/andreakarasho), [Jaedan](https://github.com/jaedan) and the ClassicUO Community -

-

Development Tools & Plugins provided with ♥ by
JetBrains
+

+

Development Tools & Plugins provided with ♥ by

JetBrains
Material Theme

diff --git a/RUNUO_TO_MODERNUO.md b/RUNUO_TO_MODERNUO.md deleted file mode 100644 index 6c553f563..000000000 --- a/RUNUO_TO_MODERNUO.md +++ /dev/null @@ -1,121 +0,0 @@ -# From RunUO to ModernUO -RunUO was built using C# from .NET 1.1 in 2002. There have been massive changes to technology in the past 20+ years. -We believe it is time for Ultima Online to take advantage of this technology so a server can provide a richer experience with never before seen scale. - -While it is possible (and many have done it) to migrate an _active server_ from RunUO to ModernUO, it is a daunting task. -Please ask for help in our discord! - -## Technology -| | RunUO | ModernUO | -|:-------------|:------------------------------------------------------------------------------------------------------|:------------------------------------------------------------| -| Language | C# 4 | C# 11 (.NET 8) | -| Supported OS | 32 & 64bit Windows or Mono | 64bit Windows, MacOS & Linux | -| IDEs | [VS](https://visualstudio.microsoft.com/downloads/), [VSCode](https://code.visualstudio.com/download) | VS 2022+ or [Rider 2023+](https://www.jetbrains.com/rider/) | - -## Code API Changes -* **ModernUO can use source generators to [serialization/deserialization](https://github.com/modernuo/SerializationGenerator#basic-usage) automatically.** - * This is the biggest change to the API! While intimidating and different, it unlocks the ability for ModernUO to only serialize _data that has changed_. - * We estimate a world save with 10mill objects on a busy server will take less than 1 second. - * This feature is _optional and will remain optional indefinitely_. -* `Serialize(GenericWriter writer)` and equiv deserialize was changed to `Serialize(IGenericWriter writer)`. -* The following now use generics, e.g. `BeginAction(typeof(X))` is now `BeginAction`. - * CanBeginAction, BeginAction and EndAction - * FindRegion and IsPartOf - * FindGump, HasGump, and CloseGump -* Functions such as `OnAdded(object)` for both Items/Mobiles are now `OnAdded(IEntity)`. -* Most `delegate` have been changed to `Action`. - * Example: `EventSink.PlayerDeath += new PlayerDeathEventHandler(EventSink_PlayerDeath);` is now `EventSink.PlayerDeath += EventSink_PlayerDeath;`. -* `ObjectPropertyList` is now `IPropertyList`, - * Example: `GetProperties(ObjectPropertyList list)` is now `GetProperties(IPropertyList list)`. -* `[Constructable]` attribute is now `[Constructible]`. - -### Object Property List API Changes -ObjectPropertyList has been drastically optimized, which means the API has been modernized: - -❌ _Not valid_ -```cs -list.Add(1061837, "{0}\t{1}", m_CurArcaneCharges, m_MaxArcaneCharges); -``` -✅ -```cs -list.Add(1061837, $"{_curArcaneCharges}\t{_maxArcaneCharges}"); -``` - -Clilocs that use arguments: - -❌ _Not valid_ -```cs -list.Add(1060659, "Level\t{1}", m_Level); -``` -✅ - _Note the string as an argument, this is mandatory!_ -```cs -list.Add(1060659, $"{"Level"}\t{Level}"); // ~1_val~: ~2_val~ -``` - -Clilocs that use other clilocs as an argument: - -❌ _Do not prepend #_ -```cs -list.Add(1060830, $"#{dirt.ToString()}"); -``` -✅ _Use the new custom cliloc argument formatter_ -```cs -list.Add(1060830, $"{dirt:#}"); -``` - -## Core Changes -* ModernUO is not inherently thread safe. Overall infrastructure improved with CPU and minimizing memory garbage in mind. -* Timer system improved drastically by using [Timer Wheels](http://www.cs.columbia.edu/~nahum/w6998/papers/sosp87-timing-wheels.pdf). -* Networking is 5-10x faster by using fixed [Circular Buffers](https://en.wikipedia.org/wiki/Circular_buffer). -* Network packets are no longer objects and write directly to the network buffer, improving performance by 10x. -* World saves are 30x faster by saving to memory and flushing to disk in the background. -* Improved RNG accuracy and performance by 5x using [Xoshiro256++](https://prng.di.unimi.it/) -* Converted quite a bit of configuration to JSON with a central settings file. -* Logging changed from Console.WriteLine to Serilog (still work in progress). -* Eliminated calling `DateTime.Now` which had a huge performance penalty. -* Accounts are now saved to a binary file (will eventually change to a databse) to improve world save performance by eliminating XML. -* Strings are now built using the new interpolated string syntax, and highly performant string builders. - -## New Features -* IPv6 support. -* Generic serialization that is automatically done in parallel with the world save. - * The [faction system](https://github.com/modernuo/ModernUO/blob/7adf52ef48df7ae2b034c27e67b0c332b37fb053/Projects/UOContent/Engines/Factions/Core/FactionSystem.cs#L15) is no longer powered by a single item and instead uses generic persistence. -* Timezone support for custom scripts that might need it. -* Hourly/daily/weekly/monthly backups & archiving using [Z-Standard](https://facebook.github.io/zstd). -* Client version detection (including CUO) for easy configuration. -* Localization (Cliloc) support. -* Better encryption for passwords using [Argon2](https://en.wikipedia.org/wiki/Argon2). -* Packet throttling that is configurable per packet and per connection. -* Enable packet logging per connection. -* Owner accounts can be protected from being locked out. The first account created is automatically added to this list. -* Use optional arguments from constructors for Add command. -* Captures Razor version and displays it in client gump -* Spawners can be exported/imported using commands and use a GUID for replacement. - -## Major Feature Changes -* By default, world saves are now every 5th minute of a real world hour. - * E.g. 5:00, 5:05, 5:10, regardless of when the server is booted. -* Some items have their constructor arguments rearranged. - -## Changes to UO Mechanics -* Min/max skill requirements for magery adjusted to be accurate to OSI -* Buffs/Curses now apply appropriately - -## Removed Features -* Reporting -* Remote Admin -* My RunUO -* Event Log -* DocsGen command - -## New Development Features & Changes -* Added a shared list/queue for temporary processing such as accumulating players to damage/kill. - * [PooledRefList](https://github.com/modernuo/ModernUO/blob/main/Projects/Server/Collections/PooledRefList.cs) - * [PooledRefQueue](https://github.com/modernuo/ModernUO/blob/main/Projects/Server/Collections/PooledRefQueue.cs) -* Adds HashSet that is ordered by insertion time - * [OrderedHashSet](https://github.com/modernuo/ModernUO/blob/main/Projects/Server/Collections/OrderedHashSet.cs) - * [PooledOrderedHashSet](https://github.com/modernuo/ModernUO/blob/main/Projects/Server/Collections/PooledOrderedHashSet.cs) -* Adds [StringBuilder](https://github.com/modernuo/ModernUO/blob/main/Projects/Server/Buffers/ValueStringBuilder.cs) that is fast and does not impose garbage collection. -* Adds performant [JSON](https://github.com/modernuo/ModernUO/blob/main/Projects/Server/Json/JsonConfig.cs) support with simple API. -* Adds performant, thread _unsafe_, [ArrayPool](https://github.com/modernuo/ModernUO/blob/main/Projects/Server/Buffers/STArrayPool.cs) -* Adds highly performant and easy to use converters for [HexString](https://github.com/modernuo/ModernUO/blob/main/Projects/Server/Text/HexStringConverter.cs) representation of data diff --git a/SPONSORS.md b/SPONSORS.md index 4264670ca..f832b6a72 100644 --- a/SPONSORS.md +++ b/SPONSORS.md @@ -5,6 +5,7 @@ Thank you to all of our generous sponsors that make ModernUO possible. **A special thank you to the following sponsors for their considerable contributions:** * [Age of Shadows](https://ageofshadows.gg) * [UO Outlands](https://uooutlands.com) +* [UO Sagas](https://uosagas.com) * Prayer ([MagnUm-Opus](https://discord.gg/CzDEq3vv2N)) ### Looking to sponsor ModernUO? @@ -31,6 +32,5 @@ xch1vzk93t538m4xukg955v3ltjtgz6rapev3evnmnxdzf4hjj5y7cuq7tkf6z #### Bitcoin 37QmRWTCjVoNWycMpo1t5JnYVDmJTGSJ9W - #### Ethereum 0x7A9D76F497d4Ee150Ada0ea0455fF3f6e8F3b6b8 diff --git a/global.json b/global.json index 1739913f7..733b653c1 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "9.0.101", + "version": "9.0.100", "rollForward": "latestMajor", "allowPrerelease": false }