Jump to content
  • We need you!

    You must register to discover all the features of our community!

[Work in Progress] QuantumCore


Recommended Posts

254508qc-logo.png

 

Welcome to QuantumCore,

 

most people always told you me you are crazy, that's a waste of time don't do that.

But I don't care and still started this project, mostly as a learning process.

 

So what is QuantumCore you ask? QuantumCore is basically a server emulator for Metin2.

In comparison to what we currently mostly use this doesn't use any source code by Ymir/Webzen and is a full reimplementation of the 40k server.

This project is still in work and far from being completed.

 

So why do you already create a thread for this? First of all we need feedback from you guys of what the features are and what

we could improve even more.

 

In addition to a normal rewrite of the core this project is using more modern technology. The code base is based on C++17 and will include features of

C++20 as soon as it's officially released. Also we only test 64bit builds, no more 32bit builds. In addition to this we are automated building the core

against the current LLVM toolchain and automatically creating Docker images. We have started to implement Unit Testing for some core features,

and we will extend this to more code we write.

 

Also we are working on embedding AngelScript (and maybe even more languages in the future) to not only write quests but also to extend the core.

The main goal is that you can create most of the new systems in AngelScript with a resonable performance instead of modifying the core source code.

For example if you want to create a new command you could write the following plugin:

void main() {
	command::RegisterCommand("test", TestCommand); 
}

void TestCommand(game::[email protected] player, string[] arguments) {
	if(arguments.length() < 2) {
		player.SendChatMessage(1, "/test [name]");
		return;
	}
  
  	player.SendChatMessage(1, "Hello from " + player.name + "(" + player.level + ") to " + arguments[1]);
}

 

We also using redis for caching fast changing fields, like player position, items etc.

 

The source code of this project will be licensed under the GPLv3 license. So you are free to modify the source code and use it for your project.
We would be also very happy if you contribute back your improvements to the core.

 

So what is the main goal?

- Providing a compatible game server to the clean 40k client

- Writing a modern, stable and scalable game server

- Keep the core extensible

 

Main repository: https://gitlab.com/quantum-core/core

Documentation: https://docs.quantum-core.io/index.html

 

With best regards,

QuantumCore Team

@arves100, @DevChuckNorris

Edited by DevChuckNorris (see edit history)
  • Love 30
Link to post
  • VIP

I'm eager to see the actual plans for the architecture/layout of the server, like how will the player/client instances handled on the server, like maybe new processes per players for handling the whole sessions until they disconnect, fully separated from other things like handling npc movements, etc, maybe something similar to that spatial os thing you once mentioned on the discord.

 

Anyway its a good idea and I'm definitely looking forward to it, but of course it (probably) has a very long way to be complete and anything could go wrong during this time, like losing interest in the project, etc...

Link to post
Posted (edited)
7 minutes ago, masodikbela said:

I'm eager to see the actual plans for the architecture/layout of the server, like how will the player/client instances handled on the server, like maybe new processes per players for handling the whole sessions until they disconnect, fully separated from other things like handling npc movements, etc, maybe something similar to that spatial os thing you once mentioned on the discord.

 

Anyway its a good idea and I'm definitely looking forward to it, but of course it (probably) has a very long way to be complete and anything could go wrong during this time, like losing interest in the project, etc...

Currently there is a similar idea to split maps by cores, but for ch99 we will add the support for automatically spawn processes which will very likely utilize docker.
For making the queries in maps more performant we are currently using a QuadTree implementation to quickly search for entities in a radius etc.

It would be possible to implement automatic instancing of busy areas too.

 

All network related handling are handled by boost asio right now.

Edited by DevChuckNorris (see edit history)
Link to post
  • VIP
7 minutes ago, DevChuckNorris said:

Currently there is a similar idea to split maps by cores, but for ch99 we will add the support for automatically spawn processes which will very likely utilize docker.
For making the queries in maps more performant we are currently using a QuadTree implementation to quickly search for entities in a radius etc.

It would be possible to implement automatic instancing of busy areas too.

 

All network related handling are handled by boost asio right now.

Sounds good. It would be also a good idea to create a way to add bots or something, simulating actual players/connections for performance testing. For example building a very lightweight console client while developing the features that you can run on bsd servers to simulate 1-2k or more players, or if there will be separated processes for player instances on server side this may won't be even necessary.

  • Love 1
Link to post
3 minutes ago, masodikbela said:

Sounds good. It would be also a good idea to create a way to add bots or something, simulating actual players/connections for performance testing. For example building a very lightweight console client while developing the features that you can run on bsd servers to simulate 1-2k or more players, or if there will be separated processes for player instances on server side this may won't be even necessary.

 

This is definitely a thing we have to do, it should be pretty easy to write a short client based on the core lib. As we have an own file format to describe how packets look like and have

a generator to generate code out of it. Maybe I, or someone else, will find the time to write a small program to simulate players.

Link to post

Hey, why did you keep this project a secret until now? ? I bet there would have been more people, like myself, willing to help out.

Anyway, amazing work, can't wait to see more technical details.

Link to post
1 minute ago, Exynox said:

Hey, why did you keep this project a secret until now? ? I bet there would have been more people, like myself, willing to help out.

Anyway, amazing work, can't wait to see more technical details.

Currently the reason is that some major setup part is not documented right now. I’ll create these documentation tonight and than I’ll update the initial post with the repository. 

Link to post
  • VIP

In the building section in the docs it says that only the following boost packages are required:

  • boost-convert
  • boost-log
  • boost-system
  • boost-filesystem

But cmake cries for boost-program-options too, that should be corrected.

Link to post
1 hour ago, masodikbela said:

In the building section in the docs it says that only the following boost packages are required:

  • boost-convert
  • boost-log
  • boost-system
  • boost-filesystem

But cmake cries for boost-program-options too, that should be corrected.

Thanks for pointing that out, we have updated the list of dependencies.

  • Love 1
Link to post
Posted (edited)
18 minutes ago, Fr3zy94 said:

Do you know that WOW P-Servers uses their own code but they still get sued? Sorry.

The critical part are multiple things:

- Providing the client

- Making money without paying taxes

- Using trademarks in any violating way

 

Working on and making this source is legal (at least based on German law), as you can also see on many other server emulator projects.

For example:

https://github.com/TrinityCore/TrinityCore

https://github.com/mangoszero/server

Edited by DevChuckNorris (see edit history)
Link to post
4 minutes ago, DevChuckNorris said:

The critical part are multiple things:

- Providing the client

- Making money without paying taxes

 

Working and making this source is legal (at least based on German law), as you can also see on many other server emulator projects.

 

Well you cannot use any elements from Metin2, even the gameplay can be a reason to get sued ( Proven by PAC-MAN lawsuit ).

Link to post
Just now, Fr3zy94 said:

 

Well you cannot use any elements from Metin2, even the gameplay can be a reason to get sued ( Proven by PAC-MAN lawsuit ).

 

Did I ever said it will be legal to host a private server using this? No, I'm not a lawyer ;)

But I know that writing server emulators is legal, and making them available to the public too.

 

The main goal of this project was and still is for me to learn more about how to write a stable and more or less solid game server, with the limitations we have.

Like not being able to replace the network protocol.

 

So I could also kept this project for me, but I wanted to make it available to all, so everybody can profit from it. No matter how.

  • Love 6
Link to post

May I ask why the project is licensed under GPLv3? From my understanding, that would mean that anybody who uses the code commercially should make their source code publicly available. I doubt there would be many people who will use this emulator for their servers and do that.

 

What's the rationale behind this? Did some other library force you to pick GPLv3? Something like the MIT license would work much better for what the metin2 community expects. 

Link to post
Posted (edited)
9 hours ago, Exynox said:

May I ask why the project is licensed under GPLv3? From my understanding, that would mean that anybody who uses the code commercially should make their source code publicly available. I doubt there would be many people who will use this emulator for their servers and do that.

 

What's the rationale behind this? Did some other library force you to pick GPLv3? Something like the MIT license would work much better for what the metin2 community expects. 

We are working on relicensing QuantumCore.

To keep track of the current issues and progress follow: https://gitlab.com/quantum-core/core/-/issues/31

Edited by DevChuckNorris (see edit history)
Link to post
Posted (edited)
On 4/29/2020 at 12:20 AM, Exynox said:

May I ask why the project is licensed under GPLv3? From my understanding, that would mean that anybody who uses the code commercially should make their source code publicly available. I doubt there would be many people who will use this emulator for their servers and do that.

 

What's the rationale behind this? Did some other library force you to pick GPLv3? Something like the MIT license would work much better for what the metin2 community expects. 

We have relicensed the core to Mozilla Public License 2.0 https://tldrlegal.com/license/mozilla-public-license-2.0-(mpl-2)

 

The reason why we have chosen MPL are multiple:

- You have to redistribute the source code if you modified QC and redistribute the binary file

  We do not want anyone to make money with QC itself (feel free to sell plugins tho)

  If you modify QC and do not share the binary you don't have to share the source.

- GPLv3 didn't really allowed plugins (they would have been GPLv3 too)

- MPL allows you write plugins and sell these commercial

Edited by DevChuckNorris (see edit history)
  • Love 4
Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.