3 KiB
3 KiB
GOALS
Architecture
- Upgrade Server/Scripts compiler to use Roslyn/C# 7
- Upgrade the code to use C# 7 standards
Administration
- Move IP logging and account data to SQL
- Move account management to web
Serialization & World Saves
- Remove Serialization/Deserialization entirely
- Create a flag to indicate when objects will be serialized.
- Players, all items held by players, houses, etc.
- Create transactions which handle changes to objects including:
- Transitioning from not serialized to serialized (created)
- Transitioning from serialized to not serialized (deleted)
- Property value changes
- Asynchronously offload the transaction to another service for permanent serialization
- Support basic KVP databases such as MongoDB, RocksDB, and Redis
- Create asynchronous request from cold storage
- External system must provide objects and their nested objects (e.g. containers)
Optimizations for large shards
- Eject inactive players and their items after they are serialized to cold storage
- Create hydration techniques for non-persisted systems (e.g. spawners, decorations, static, champions, etc)
- Simplify certain items by eliminating all of their individual types and using an enum to reference their individual type
- Items subject to change: reagents, logs, ore, ingots, potions, and containers
- Syntax change:
new MandrakeRoot()->new Reagent(ReagentType.MandrakeRoot)
- Create object pools for high availability items such as gold and reagents
- For example,
new MandrakeRoot()->ObjectPool.Get<Reagent>(ReagentType.MandrakeRoot). - Pools should be elastic and adjust according to nominal usage. For example, if thousands of gold objects are created and destroyed in a small period of time, the pool should be expanded and replenished properly so it is never empty, or full.
- For example,
- Replace timer system with a wheel implementation
- Create
DefaultNamefor mobiles - Improve asynchronous socket handling
Code Architecture Fixes
- Create a LayeredItem child and move related code to that class. All layered items should inherit that.
- Items that are placed on the paperdoll will need to inherit this.
- Create a StackedItem child and move related code to that class.
- Items that have an amount will need to inherit this.
Bugs & Misc
- Naked corpses (container display issue)
- Rounding errors with new bank system
- Replace
doublewithintfor skills to fix rounding errors and optimize code - Replace specific checks for
Item/Mobileby extendedIEntityand mainstreaming theNEWPARENTcode - TryDropItem dropping items until it fails when it should be all-or-nothing
- Consuming items are deleted directly in several places instead of using
Item.Consume() - Content displaying for newer clients is not working properly in several situations
- Stack/Hold checks are broken in certain situations