[Project] Rhisis - C# Emulator

Eastrall

New member
Nov 27, 2018
1
1
1
#1
Hello everyone!


Some of you may know, that for some months now, I am working on a Fly For Fun emulator aiming to replace the official server files. At the begining, this project started on a different name, but as I was developing it, I notice some architecture/structure problems. In order to build a solid and efficient project, I started an other project with a better architecture and introduced other concepts never seen before in the history of FlyFF emulators.

Allow me to introduce you Rhisis.

What is Rhisis?

Rhisis is a Fly For Fun emulator project developed in C# and using the .NET Core Framework to target Windows and Linux systems.

This project has been started for learning purposes, to improve ourselfs, learn more about C#, the .NET Core Framework and the network and game logic problematics on the server-side.

Of course, we will do our best to make*Rhisis*as stable as the official files (or even better!). The goal is to create a community around this project, share ideas, contribute and improve ourselfs.


As I said in the previous lines of this topic, I have introduced new concepts and a better architecture. Almost all of the previous emulators we know about have an architecture based on the inheritance pattern and the actual game logic is located everywhere on the emulator.

So I've used another pattern introducing entities and individual systems that contains the game logic. Since every system is independant, if you create one system, it will not impact the others, so it will be easier to find and fix errors.

Note: this project is no way affiliated with the emulator developed by Akitasha and BBim in 2009. ;-)

Rhisis in details

Name of the project: Rhisis
Status: Open-Source
Hosted: GitHub
Environment: Visual Studio 2017
Language: C# 7.X
Framework target: .NET Core 2.0
Continuous Integration tool: Travis CI
Code review tool: Codacy
Database types: MsSQL / MySQL
External libraries used:
  • Entity Framework Core
  • Newtonsoft.Json
  • Ether.Network (Soon moving to the Sylver library)

Technical details about Rhisis


As I said in the beginning of this post, the emulator will have an evolutive architecture based on the Entity Component System.

The main goal of this architecture is to say that every object in the world is an Entity (player, monster, npc, etc...) et each of this entities can have one or more components attached to them.

A Component is just a simple object containing properties. For exemple, a component can be defined this way: AppearanceComponent, contains properties for the hair color, hair style, face style, etc...

Finally, the Systems is where the game logic will take place. Each system is independant and will have his own life cycle. For example, the "VisibilitySystem" will not interfer with the "InventorySystem" that will handle the player's inventory.

This new architecture is used in most of the recent games and will allow us to create a scalable and maintainable emulator. If we have a problem with visibility, we know where to look for errors.

About the database system, we use the Microsoft Entity Framework Core library combined with a generic repository pattern instead of using directly the DbSet collection.

Features

This is the features list Rhisis already provides :

Core
  • Rinjdael cryptography algorithm
  • Custom exception
  • Packet handler
  • Resource readers

Database
  • Multiple database support (MySQL and MsSQL)
  • Repository pattern

Login Server
  • Inter-Server authentication (ISC)
  • Client authentication process
  • Send server list to connected clients

Cluster Server
  • Inter-Server authentication (ISC)
  • Character list
  • Create character
  • Delete character
  • 2nd password verification
  • Join game

World Server
  • Inter-Server authentication (ISC)
  • Connection to the world
  • Visibility with other entities (Players, Monsters)
  • Mobility system (real time position calculation)
  • Chat system
    • Normal chat
    • Chat commands
      • Create item : /ci or /createitem
      • Teleport : /teleport
      • Create gold : /getgold
  • Inventory system
    • Move items
    • Equip/Unequip items
    • Save inventory
  • Trade system
  • Shop system
  • NPC Dialog system
  • Follow System
  • Battle System
    • Monster follows player when attacked and goes to original position after player run away

Useful links

There is the link for our GitHub project :
Also, for people that want to test the emulator, I provide our Neuz compatible with Rhisis:

Thank you for reading the presentation until the end and see you on discord.

This post will be updated with more informations soon...



Cheers,
Eastrall