This project aims to create an easy to use, extendable and customizable server for a MMORPG called "MU Online" in the version of Season 6 Episode 3 using the ENG (english) protocol.
Branch: master
Clone or download
sven-n Plugin System Infrastructure (#91)
* Added new projects for the plugin system assemblies

* Added a collection PlugInConfigurations to the GameConfiguration

* Added a first rough implementation of a plugin infrastructure

* Added the PlugInManager to the GameContext

So, now the game logic can begin using it

* Refactored chat commands as a first example into plugins

This might not be the final shot, though.
I'm thinking about somehting like Strategy-PlugIns, where you hand over a key (here: command-string) and get the wanted strategy

* Added the concept of Strategy-PlugIns

They can be retrieved from the PlugInManager by providing their type and a generic key which is used to select the right strategy.

* Refactored TeleportChatCommandPlugIn to be a Strategy PlugIn

* Moved variable declaration closer to actual usage

* Added missing else clause

* Added comments to empty methods

* Made generic interfaces covariant and contravariant

In the interests of making code as usable as possible, interfaces and delegates with generic parameters should use the out and in modifiers when possible to make the interfaces and delegates covariant and contravariant, respectively.

* Create Readme.md

* Added some syntactic sugar to make calls to StrategyPlugIns simpler

* Simplified call to IChatCommandPlugIn

* Fixed using order
Latest commit 51d6bf2 Feb 17, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
doc
src Plugin System Infrastructure (#91) Feb 17, 2019
tests Plugin System Infrastructure (#91) Feb 17, 2019
.gitignore Refactored AdminPanel project to use ASP.NET Core Nov 14, 2018
.travis.yml Updated travis ci configuration to use .net core 2.1 Nov 14, 2018
LICENSE inital commit Nov 23, 2017
QuickStart.md Added a way to resolve the listener IP on the local computer (#85) Nov 19, 2018
README.md

README.md

OpenMU Project

License Build Status Codacy Badge Gitter chat

Welcome to the OpenMU project.

This project aims to create an easy to use, extendable and customizable server for a MMORPG called "MU Online" in the version of Season 6 Episode 3 using the ENG (english) protocol. However, parts of the software can also be suitable for the development of other games, even for other kind of games.

The code is a complete rewrite from scratch - it's not based on any pre-existing projects, and it's also explicitly not based on the well-known decompiled server source of "Deathway" or one of its countless derivates.

There also exists a blog which may contain some valuable information about this development.

Current project state

This project is currently under development without any release.

Licensing

This project is released under the MIT license (see LICENSE file).

Used technologies

The project is mainly written in C# and targets .NET Standard/Core 2, except for some little tools which still require the full .NET Framework 4.6.1.

The servers admin panel is hosted on an embedded ASP.NET Core webserver (Kestrel) and uses the React framework for the user interface.

At the moment the persistence layer uses the Entity Framework Core and PostgreSQL as database.

Contributions

Contributions are welcome if they meet the following criteria:

  • Language is english.
  • Code should be StyleCop compliant - this project uses the StyleCop.Analyzers for VS2017 so you should see issues directly as warnings.
  • Coding style (naming, etc.) and quality should fit to the current state.
  • No code copied/converted from the well-known decompiled source of the original server.

If you want to contribute, please create a new issue for the feature or bug (if the issue doesn't exist yet) so we can see who is working on something and can discuss possible solutions.

Apart of that, contributions from non-developers are welcome as well. You can test the server, submit issues or suggestions, packet descriptions or documentations about the concepts and mechanics of the game itself. Please use markdown files/syntax for this purpose.

If you have questions about that, don't hesitate to ask by submitting an issue.

How to contribute code

If you want to contribute code, please do the following steps:

  1. fork this project from the original MUnique OpenMU Project.
  2. create a feature branch from the master branch
  3. commit your changes to your feature branch
  4. submit a pull request to the original master branch
  5. lean back, wait for the code review and merge :)

How to use

Have a look at the quick start guide.

Gameplay differences to the original server

This project doesn't have the goal to copy the original MU Online server behavior to 100 %. This is not entirely possible, because the original server is written in another programming language and has a complete different architecture. With some points we make our live easier in this project, with other points we try to improve the gameplay.

Calculations

The calculations of attribute values (like character damage decrement etc.) is done with 32 bit float numbers and without rounding off, like the original server does at some places.

Money drops

The original server drops money (zen) on the ground when a player kills a monster. The serialization of it is a bit strange, because it's sent as 'item drop' and misuses item fields to represent the money value. We make our live here easier, because we don't drop money. Instead, we directly add it to the inventory of the player(s). Benefits:

  • More performance, as we don't create a ton of new "Item" objects which are actually no items. Money drops really often on the original server.
  • Cleaner code as we don't misuse "Item" objects and don't need to invent something like a "MoneyItem".
  • This also slightly improves gameplay - picking up all the money on the ground is a bit annoying.

Countdown when changing character or sub-server

The original server uses a five second countdown when a player wants to change his character or the sub-server. Maybe this was done for some performance reasons, as the original server would then save the character/account data. We think that's really annoying and see no real value in that, so we don't use a countdown.