Commit graph

417 commits

Author SHA1 Message Date
Kamron Batman
fdcd6c80a8
chore: Adds benchmarks for RunUO vs ModernUO Timers (#984) 2022-03-31 00:16:45 -07:00
Kamron Batman
55a6589644
fix: Fixes wrong point reference in building region (#982) 2022-03-30 13:14:29 -07:00
Kamron Batman
a5a5460291
fix: Fixes world save timer issue (#981)
Fixes a major bug where a race condition could cause the timer wheel to have non-deterministic behavior and potentially never finish the save.
2022-03-29 15:08:23 -07:00
Kamron Batman
e9f986f55b
fix: Adds Gen2 callback for each STArrayPool (#971)
Adds. Gen2Callback for STArrayPool so it can purge the internal array stacks properly. This only happens if significant timed has passed, 2 Gen 2's have been run, and memory pressure exceeds a threshold.
2022-03-26 13:57:42 -07:00
Kamron Batman
474427041f
feat: Adds a PooledRefList (#676) 2022-03-26 11:11:22 -07:00
Kamron Batman
601eb4e116
fix: Uses variables for gump html localized (#970) 2022-03-22 23:51:36 -07:00
Kamron Batman
c166e113b1
fix: Streamlines gump compilation (#969)
Changes gump compilation to use string interpolation. .NET 6 uses code generation and compile time tricks to speed up string interpolation between 15 and 30% and reduce allocations dramatically.
2022-03-22 23:46:10 -07:00
Kamron Batman
14b63ca48e
fix: Updates ArrayPool to STArrayPool for performance. (#968) 2022-03-22 20:07:32 -07:00
Kamron Batman
76fddcbccd
feat: Adds a single threaded array pool (#967)
## Added Feature
Adds a single threaded array pool that works exactly the same as `ArrayPool<T>.Shared`.
The `STArrayPool<T>.Shared` can only be used on a single thread, the main game thread of the server.

Note: Unlike the built-in array pool, there is no hook into the _GC Gen 2_. This means to relieve potentially high memory pressure, `ArrayPool<T>.Shared.Trim()` must be called. The pool will only release arrays _after two successive calls within 10 seconds or longer_. If the server is at less than 70% total memory usage, or the server is not going to use this pool for something egregious, then don't bother ever calling Trim().


## Changes
- [X] Fixes ArrayPool calls that should be cleared due to references.
- [X] Benchmarks against ArrayPool with 4+ rented arrays deep of the same length.
- [x] Unit tests
2022-03-22 09:58:24 -07:00
Kamron Batman
0925a2d435
fix: Cleans up Point checks and removes statics (#966)
- [X] Removes static freezing/unfreezing. Use other tools for this.
- [X] Cleans up IPoint3D allocations
- [X] Removes IPoint3D constructors since the compiler may not optimize the constructor path and allow allocations.


Note: Instead of `new Point3D(m)`, do something like `new Point3D(m.Location)`. Sorry for the inconvenience. In the long run this will prevent abuse of hot paths that will cause performance issues.
2022-03-20 23:15:59 -07:00
Kamron Batman
23532db603
fix: Cleans up LINQ calls. (#965)
- [X] Removes several `ToList()` uses with `PooledRefQueue`
- [X] Adds a `PeekRandom` to PooledRefQueue
- [X] Updates EV/BS so they dispel each other in a more efficient manner.
- [X] Fixes Firebomb so it works like a normal firefield.
- [X] Fixes field spells so they aren't unnecessarily using a Point3D ref more than necessary.
- [X] Removes extra allocation in campfire by using reverse loop.
- [X] Removes other LINQ calls that aren't needed.
2022-03-20 19:20:54 -07:00
Kamron Batman
1ec3636951
fix: Fixes speed issues (#959)
- [X] Removes all speeds in constructors since _they aren't used anyways_.
- [X] Adjusted timers according to the _time transformations in RunUO_.
2022-03-15 10:18:27 -07:00
Kamron Batman
16c4268b54
fix: Fixes file reading. (#958)
.NET 6 introduced a breaking change where lseek and sys-calls are not used for reading and file streams. This effectively broke out native reader. Since the file reading is fairly optimized, and honestly we don't need it to be "fast" in this case, I have removed the native reader.

https://devblogs.microsoft.com/dotnet/file-io-improvements-in-dotnet-6/
2022-03-11 01:45:03 -08:00
Kamron Batman
bdee7bc671
fix: Fixes NPC slowness. (#955)
* Adds the following configurations:
  * `movement.delay.npcMinDelay` - 0.1 - Pets or Non-monster NPCs
  * `movement.delay.npcMaxDelay` - 0.4 - Pets or Non-monster NPCs
  * `movement.delay.monsterMinDelay` - 0.4 - Non-pet Monsters or NPC vs Player Combat
  * `movement.delay.monsterMaxDelay` - 0.8 - Non-pet Monsters or NPC vs Player Combat
  * `movement.delay.monsterMinDex` - 150 - Dex maximum for delay by dex
  * `movement.delay.MinDex` - 190 - Dex maximum for delay by dex
2022-03-10 22:55:06 -08:00
Kamron Batman
58b907d39e
fix: Fixes packet length checks (#953)
Fixes an issue with DropReq where an old client was sending in 14 bytes, but the server was expecting 15 bytes.

To fix this we introduced a new packet handler, `ContainerGridPacketHandler` and changed the code to determine the length of the packet dynamically using `GetLength(NetState)`.

Also fixed throttling so dropped packets are properly skipped.
2022-03-04 12:32:25 -08:00
Kamron Batman
1f4162288e
fix: Fixes UOClient NPE (#952) 2022-02-28 17:24:00 -08:00
Kamron Batman
651cffa872
fix: Cleans up mobile status packets (#835)
* Removes Span2D for mobile moving. Instead uses pure math and simplifies the calculation.
* Cleans up the extended mobile status packet.
2022-02-27 03:10:35 -08:00
Kamron Batman
e873d2ed7e
fix: Simplifies fastwalk detection (#907)
* Uses a circular buffer for steps.
* Limits to 3 steps instead of 4.
* Gives a 5% buffer on the first step.
2022-02-27 02:20:03 -08:00
Kamron Batman
5b7b99e0de
fix: Adds CUO settings support and adds more robust 7.0.9 support (#945) 2022-02-27 02:15:06 -08:00
Kamron Batman
941452de4a
fix: Stops creating blocked packets entirely (#944)
Optimizes larger servers where users are logging in and packets are being created for no reason.
2022-02-27 00:13:49 -08:00
Kamron Batman
5db8b1354c
fix: Fixes various minor issues (#943) 2022-02-26 23:43:25 -08:00
Kamron Batman
6593abf418
fix: Fixes weight problem with dupe. Fixes mobile base weight. (#938) 2022-02-18 22:11:57 -08:00
Kamron Batman
48f1fe3384
fix: Moves codegen to its own repo (#918)
- [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
2022-02-12 17:58:42 -08:00
Kamron Batman
ba378fc5f2
fix: Adds Ubuntu 14 and Linux Mint 17/18/19 support specifically (#908) 2022-01-03 14:19:39 -08:00
Kamron Batman
c1134c526f
fix: Fixes sorting (#905) 2021-12-29 10:10:53 -08:00
Kamron Batman
284c3d0f34
fix: Removes LINQ from Map.cs (#834)
* Removes LINQ from Map
* Removes broken GetObjectsInRange with items/mobile flags.
2021-12-28 14:32:45 -08:00
Kamron Batman
93f09ba831
fix: Fixes account gold settings (#898) 2021-12-27 17:17:45 -08:00
Kamron Batman
58190674f9
feat: Adds StaffAccess and ResetStaffDress commands (#895) 2021-12-27 01:27:15 -08:00
Kamron Batman
63e1b02d93
chore: Cleans up pattern checks. (#892) 2021-12-24 15:53:59 -08:00
Kamron Batman
b125146b27
fix: Adds BitArray support with codegen (#888)
* Adds a custom BitArray class with the following added features:
  * ctor for creating BitArray against read only span
  * ctor for creating BitArray against BinaryReader
  * CopyTo to copy a BitArray to a Span
* Adds BitArray to UO Primitive serialization so it can be codegenned.
2021-12-13 09:31:02 -08:00
Kamron Batman
16f65e59c6
fix: Fixes VS builds by reverting back to nstd20 (#882) 2021-12-07 10:20:30 -08:00
Kamron Batman
ef5aee87f3
fix: Adds back generic timer delay call (#880) 2021-12-05 22:55:24 -08:00
Kamron Batman
b67d57d806
fix: Adds Debian 11 and fixes Fedora 34 support (#875)
* Adds Debian 11 support
* Fixes Fedora 34 support
* Updates CentOS8 support
2021-12-04 23:40:38 -08:00
Kamron Batman
7da6cec27e
fix: Bumps source generator to netstandard2.1 (#874) 2021-12-04 11:58:59 -08:00
Kamron Batman
d1f4632012
fix: Fixes targeting range (#871) 2021-12-02 09:35:52 -08:00
Kamron Batman
bea20f36a0
fix: Fixes targeting checks (#869)
* Adds CanTarget for more granular overrides of specific targeting restrictions
* Updates spell targeting
* Fixes targeting checks
2021-12-01 08:15:16 -08:00
Kamron Batman
aff2f15a6c
fix: Fixes guild deserialization (#867)
* Fixes guilds being marked as deleted because the leader hasn't been deserialized yet.
* Fixes LastSerialization issue.
2021-11-28 20:54:16 -08:00
Kamron Batman
1ac803e778
fix: Adds better client verification (#853)
* Adds MinRequired and MaxRequired settings
* Removes god client detection
* Streamlines the kick messaging
* Fixes detecting client version on mac/linux
2021-11-27 10:06:39 -08:00
Kamron Batman
7439cc3a95
fix: Bumps native runtimes to .NET 6 (#861) 2021-11-22 07:39:01 -08:00
Kamron Batman
c8a6d4c696
fix: Fixes .net 6 compilation (#860) 2021-11-21 18:06:39 -08:00
Kamron Batman
43db0d09c9
fix: Weapons cleanup (#857)
* Removes linq
* Removes list allocation for area effect
* Removes redundant swing overload
* Cleans up code
2021-11-21 09:19:09 -08:00
Kamron Batman
5df7bf6a75
fix: Removes duplicative spell checks (#849) 2021-11-14 18:45:16 -08:00
Kamron Batman
91493f7f27
fix: Fixes guild assignment (#846) 2021-11-13 16:31:10 -08:00
Kamron Batman
c31bf20d0e
feat: Updates to .NET 6 (#843)
* Fixes an issue with moving directories across volumes
* Removes usages of WebClient
* Removes usages of Cryptographic Providers

Note: Even though .NET 6 introduces Xoshiro RNG, there is no way to control the seed. I'll do some reconciliation of Xoshiro so it functions closer to the built in one. For the most part, it has parity though.
Benchmarks show there is nothing odd about the implementations, they are within 1ns of each other.
2021-11-13 13:38:01 -08:00
Kamron Batman
a4d9a3bdc2
Adds dictionary to codegen (#838)
* Adds Dictionary serialization rule for codegen
* Adds Tidy for Dictionary. By default will remove key/value pairs where the key or value is either null or deleted. Only works for ISerializable keys or values (or both).
2021-11-07 13:20:11 -08:00
Kamron Batman
2890f5c3ec
fix: Adds packet logging (#836)
### Enabling Packet Logging
`[packetlogging on` and target the user.
Supports command modifiers such as:
`[online packetlogging on where accesslevel = player`

Logs are saved in `path/<ip address>/packets.log`. It is a simple append-format log with no date splitting.
2021-10-31 10:22:22 -07:00
Kamron Batman
bfbe2a6512
fix: Updates professions & new player gargish equipment (#819)
* Now reads Prof.txt to get the professions
* The templated professions are based on profession `TrueName`
* Adds missing starting equipment
* Implements gargish starting equipment
* Consolidates some of the code
* Moves TC stuff to the TC file.
* Fixes some starting equipment that was wrong.

Note:
* Implementing the original T2A professions is possible on the client side, but requires moving the old clilocs to the current clilocs file. In the current file the entries are blank.
* Using the original LBR professions (they match AOS but without necromancy/chivalry) is kind of confusing because the profession indexes are ripped out of the UOTD/UOR ones and have non-sequential indexes. This will probably cause confusion and people will get no templated items when they select the wrong profession.
2021-10-16 10:48:58 -07:00
Kamron Batman
f4302928bb
fix: Fixes combat timers (#824) 2021-10-11 23:53:17 -07:00
Kamron Batman
9f0144dd08
chore: Bumps PollGroup to 1.1.0 (#827) 2021-10-10 12:22:25 -07:00
Kamron Batman
507eba34a8
fix: Replaces PollGroup with nuget (#823) 2021-10-09 13:52:53 -07:00