Commit graph

1580 commits

Author SHA1 Message Date
Kamron Batman
82b0d03e19
fix(codegen): Fixes serializing classes with no fields (#609)
Fixes code genning classes with no fields.
Fixes code genning primitives.
FIxes code genning uo types.
2021-05-23 21:47:18 -07:00
Kamron Batman
9afa4e4cab
feat: Source generated Serialization/Deserialization (#550)
### 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"
      ]
    }
  ]
}
```
2021-05-23 21:06:23 -07:00
Kamron Batman
cb66bef0e5
fix(core): Cleans up serialization (#606) 2021-05-16 13:45:32 -07:00
Kamron Batman
8418d4a7db
fix(builds): Adds Fedora for build testing (#605)
- [X] Removes CentOS 8 docker image
- [X] Adds Fedora 32/33
2021-05-16 01:14:09 -07:00
Kamron Batman
db02a6b6e9
fix(core): Fixes some properties that cannot be modified ingame (#604)
- [X] Adds a property to `CommandProperty` to allow modifying `PropertyObject` where there is no property setter that is accessible.
- [X] Updates AosAttributes and friends

Example of how to make this work:
```cs
        [CommandProperty(AccessLevel.GameMaster, canModify: true)]
        public AosWeaponAttributes WeaponAttributes { get; private set; }
```

This fix is necessary because in release mode the optimizer will sometimes _entirely remove the setter_ because it knows it can do something that is more efficient _when the property setter is private_. RunUO got around this by declaring a public setter explicitly that _was empty_.

### Screenshot
<img width="313" alt="Screen Shot 2021-05-15 at 11 34 01 PM" src="https://user-images.githubusercontent.com/3953314/118387955-49293c00-b5d6-11eb-8f31-a3b5e31bd18b.png">
2021-05-15 23:47:33 -07:00
Kamron Batman
3023254d87
fix(core): Changes random source to use debut assert (#603)
Changes RNG to not crash in release mode with bad values.
2021-05-15 20:15:22 -07:00
Kamron Batman
6866d51074
fix(admin): Fixes Tokuno Go Locations (#602)
Fixes Tokuno go locations
2021-05-15 19:07:28 -07:00
Kamron Batman
4e9d656809
fix(core): Adds Fedora 32/33 & RHEL 7/8 support. (#601)
- [X] Adds support for Fedora 32/33 (runtimes included)
- [X] Adds support for RHEL 7/8 (will require manual install of zlib and argon2)
- [X] Updates dependencies
2021-05-14 00:32:22 -07:00
Kamron Batman
edea1d4906
fix(core): Fixes core tick count for VMs (#600)
Some architectures (specifically docker) have an issue with tick count and high precision timing.
This handles those weird cases so instead of outright freezing, you may get timer precision loss.
2021-05-13 18:22:42 -07:00
Kamron Batman
6dcf3aafe8
fix: Reverts PR #96 (#599) 2021-05-12 21:51:56 -07:00
Kamron Batman
ce86f377f0
fix(currency): Changes virtual checks setting (#598)
Changes virtual checks to enable with Core.TOL instead.
2021-05-12 10:52:34 -07:00
Kamron Batman
8ad34d4838
fix(currency): Fixes virtual checks setting (#597) 2021-05-12 10:32:17 -07:00
Kamron Batman
25eb79278e
fix(core): Reverts change to Serial.IsValid (#596) 2021-05-12 09:59:03 -07:00
Kamron Batman
00ff4b9247
fix(houses): Fixes custom house packets (#594) 2021-05-11 00:07:37 -07:00
Kamron Batman
be9d355b33
fix(serial): Fixes type inference for serialization (#592) 2021-05-09 11:33:06 -07:00
Kamron Batman
0afdc075cb
fix(doom): Adds RemGauntlet (#591)
- [X] Adds a `RemGauntlet` command.
- [X] Makes `GenGauntlet` remove before adding.
- [X] Organizes the Doom files.

Closes #586
2021-05-09 09:40:23 -07:00
Kamron Batman
7819830628
feat(champs): Ports Casiopia champions (#584) 2021-05-09 00:20:43 -07:00
Kamron Batman
6e9477ea13
fix(core): Updates to serialization (#590)
- [X] Adds `AdhocPersistence` which replaces RunUO `Persistence`
- [X] Fixes a few minor bugs with EntityPersistence deserialization
- [X] Reverts/updates some serialization changes
2021-05-09 00:10:39 -07:00
Kamron Batman
f0969223f7
Fixes awaiting seed for < v6 clients (#589)
Fixes an issue with awaiting for a seed that matches an informational packet.
Thanks @andreakarasho!
2021-05-05 11:47:54 -07:00
Kamron Batman
8306db9e91
fix(content): Fixes duplicate alias type (#588) 2021-04-30 00:59:53 -07:00
Kamron Batman
4da0adc51d
fix(core): Fixes assembly handler of alias types (#587)
- Fixes assembly handler so it properly loads type aliases.
2021-04-29 22:47:16 -07:00
Kamron Batman
13717ab2d5
fix(core): Fixes displaying some doubles (#585) 2021-04-25 14:04:44 -07:00
Kamron Batman
a0893b68c0
fix(core): Updates slice with range selectors (#583)
- [X] Replaces Span slicing with range selection
- [X] Replaces string slicing with range selection
2021-04-23 20:57:24 -07:00
Kamron Batman
9f9d990f85
chore(logging): Logging cleanup (#580) 2021-04-23 18:57:42 -07:00
Pedro Pardal
c6cbda6f52
chore(logging): Migrate some logs to ILogger (#582) 2021-04-22 08:45:49 -07:00
Michael Whelehan
421d852991
fix(mobile): Make Criminal virtual and expose ExpireCriminalTimer property (#579) 2021-04-20 01:05:05 -07:00
Kamron Batman
e545cdd81c
fix: Fixes props gump read only (#581) 2021-04-19 23:49:04 -07:00
Pedro Pardal
3a619e0103
feat(logging): Adds support for Serilog (#573)
Example:
```cs
public class SomeClass
{
  private static ILogger _logger;
  private static Logger => _logger ??= LogFactory.GetLogger(typeof(SomeClass));
  ...
}
```
2021-04-19 23:43:54 -07:00
Kamron Batman
5e1ec5416d
fix(core): Fixes bad deserialization not skipping entry (#578) 2021-04-18 20:46:54 -07:00
Kamron Batman
ad7f3b3b5c
fix(networking): Standardizes SecureTrade packets (#577)
- Updates secure trade packets. Ref: https://docs.polserver.com/packets/index.php?Packet=0x6F
2021-04-16 11:26:21 -07:00
Kamron Batman
bdf0dbde1e
chore(json): Cleans up json converters (#576) 2021-04-16 00:49:57 -07:00
Kamron Batman
16c62f36b5
fix(core): Fixes generic persistence not deserializing (#575) 2021-04-16 00:14:11 -07:00
Kamron Batman
0d7ec99cbe
fix(core): Fixes serialization registry (#574) 2021-04-15 19:55:57 -07:00
Pedro Pardal
837ca91843
feat: Command prefix is now configurable via settings (#572) 2021-04-15 13:53:15 -07:00
Pedro Pardal
c8f4149fed
fix(core): Configure expansion from config (#571) 2021-04-15 12:27:08 -07:00
Kamron Batman
dd2933a9ef
fix(cleanup): Consolidate the duplicate code in Properties, PropsGump, and PropsConfig (#540) 2021-04-14 22:58:56 -07:00
Kamron Batman
98ce65083a
fix(core): Updates expansion and map configurations (fixes map issues) (#570)
- [X] Adds question about expansion at start of server
- [X] Adds question about client version to determine old have and map diffs
- [X] Adds config setting "maps.enablePre6000Trammel"
- [X] Rearranges some of the loading order.
- [X] Added support for deserializing nullable enums from json

TODO:
Expand the nullable enums deserialization factory to work with any type by pulling the factory and creating an instance of the converter.
2021-04-14 01:45:18 -07:00
Kamron Batman
151eef470f
update(release): Updates .NET 5 version in workflows (#569) 2021-04-10 21:49:44 -07:00
Kamron Batman
b51bab5f1d
fix(core): Fixes item mask in incoming mobile packet (#568)
- [X] FIxes the item mask in incoming mobile packet
- [X] Streamlines some of the send info stuff
- [X] Adds a few missing packet initializations
2021-04-10 21:48:07 -07:00
Kamron Batman
ee61c5a257
fix(boats): Fixes boat movement issues (#567)
- [X] Fixes entity enumerator short circuiting when it hit a bad case
- [X] Fixes order of moving entities because boat pieces that constitute tiles must be moved after objects that stand on them. (The llama problem).

TODO: Implement packet of packets for displaying boats

Notes:
- In the future, we will have z-sorted lists, and we can iterate from highest to lowest, which will avoid the llama problem naturally.
2021-04-10 17:22:50 -07:00
Kamron Batman
529abb4283
fix(core): Fixes threading issue and adds threadguard (#565)
Setting `m.NetState = null` from a different thread caused `Mobile.Delta` and `NetState.Send` to run from a separate thread which cannot happen.
- [X] Fixes this issue
- [X] Adds THREADGUARD compiler constant as an option to trace this in the future.
2021-04-08 21:56:31 -07:00
Kamron Batman
47bbd72e55
fix(readme): Fixes azure pipelines badge (#564) 2021-04-06 09:42:59 -07:00
Kamron Batman
107b4a2bf4
fix(core): Fixes virtue packet (#563)
* Fixes check on virtue packet

Closes #562
2021-04-05 23:55:13 -07:00
Maciej Cz
572edf3e48
fix: Prevent gargoyles from hopping on a mount (#561) 2021-04-05 12:32:55 -07:00
Maciej Cz
89223e9196
fix(content): Adds Gargish leather and studded armor (#559) 2021-03-31 17:29:25 -07:00
Kamron Batman
7df6639256
fix(core): Fixes netstate dropping late (#556) 2021-03-19 02:01:02 -07:00
Kamron Batman
d40273f99d
fix(core): Cleanup UOGateway (#555) 2021-03-15 18:02:34 -07:00
Kamron Batman
6649344ad2
fix(connectuo): Fixes lower case tokens (#554) 2021-03-15 16:59:19 -07:00
Kamron Batman
24ed9b3236
fix(core): Fixes call priority (#553)
- [X] Fixes call priority
2021-03-15 16:51:27 -07:00
Kamron Batman
c50322c0e3
fix(network): Adds UOG & Fixes ConnectUO packet (#552)
- [X] Adds UOG Extended and Compact (0xF1 0x51 packet)
- [X] Fixes ConnectUO bad length
2021-03-15 16:18:28 -07:00