NosCore is a spare-time open source project. Sponsoring does not buy a hosted server, a license or a support contract — it buys time spent on the emulator and on the packages around it (NosCore.Packets, NosCore.Dao, NosCore.Algorithm, the parser tooling).
Sponsors get the Supporter role on our Discord.
We are not responsible of any damages caused by bad usage of our source. Please before asking questions or installing this source read this readme and also do a research, google is your friend. If you mess up when installing our source because you didnt follow it, we will laugh at you. A lot.
This project is a community project not for commercial use. The emulator itself is proof of concept of our idea to try out anything what's not possible on original servers. The result is to learn and program together for prove the study.
This Website and Project is in no way affiliated with, authorized, maintained, sponsored or endorsed by Gameforge or any of its affiliates or subsidiaries. This is an independent and unofficial server for educational use ONLY. Using the Project might be against the TOS.
Any editor that handles .NET 11 works: the build, the tests and every tool here run from the command line on Windows, Linux and macOS. In Visual Studio we recommend:
documentation/getting-started.md goes from a fresh clone to a character in the world: the game data the parser needs, the database, the order to start the servers in, the accounts that exist by default and how to point a client at your server.
documentation/architecture.md explains how the servers, the projects and the sibling packages fit together.
In short, with each server in its own terminal:
dotnet build NosCore.sln
cd build/net11.0
dotnet NosCore.Parser.dll --folder <parser input folder>
dotnet NosCore.MasterServer.dll
dotnet NosCore.LoginServer.dll
dotnet NosCore.WorldServer.dll
It needs the .NET 11 SDK and a PostgreSQL on localhost:5432 (user postgres, password password). The parser creates the database and applies the migrations itself.
On Windows, scripts\ has a .cmd for each of these, and docker-compose.yml runs the same servers in containers.
Master, world, login and web API servers talk to each other through Wolverine. By default the queues live in the same PostgreSQL database as the game data, so there is nothing extra to install.
The PostgreSQL transport polls its queues (PollingIntervalMs, 20 ms by default), so every master round trip costs one to two polling intervals. For production, switch every server to RabbitMQ in its Messaging section (or with the MESSAGING_TRANSPORT / RABBITMQ_URI environment variables):
Messaging:
Transport: RabbitMq
RabbitMqUri: amqp://user:password@rabbitmq:5672All servers must use the same transport. Queues are created on startup.
Every NosCore repo ships a Directory.Build.props that adds a NuGet source when the NOSCORE_LOCAL_PACKAGES environment variable is set — useful for testing an un-released NosCore.Packets / NosCore.Dao / NosCore.Shared build without publishing it.
One-time setup (run once per machine):
setx NOSCORE_LOCAL_PACKAGES C:\LocalPackages
mkdir C:\LocalPackages
Restart Visual Studio / your shell so the new variable is picked up.
Drop any .nupkg file into that folder, then restore as usual. If the variable is unset the property group is skipped and only nuget.org is used — no action needed for contributors who don't want local packages.

