Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 26 additions & 5 deletions docs/About-the-project.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
Vanilla-MaNGOS is an open-source Vanilla WoW emulation project. It is a continuation of the Nost family of projects, which branched from MaNGOS-Zero several years ago. It was developed privately by the Nost team until late 2016, when the source code was transferred to the Elysium Project who made it open source. Unlike other emulation projects like cMaNGOS and TrinityCore which only seek to recreate the last patch of each expansion, this project aims to provide full content progression through Vanilla WoW.
Vanilla-MaNGOS is an open-source Vanilla WoW emulation project. It is a continuation of the Nost family of projects, which branched from MaNGOS-Zero several years ago. It was developed privately by the Nost team until late 2016, when the source code was transferred to the Elysium Project who made it open source.

Unlike other emulation projects like cMaNGOS and TrinityCore which only seek to recreate the last patch of each expansion, this project aims to provide full content progression through Vanilla WoW.


## Useful Links

Expand All @@ -8,12 +11,30 @@ Vanilla-MaNGOS is an open-source Vanilla WoW emulation project. It is a continua

## What is what

The emulator has three major components. The first things you'll encounter are the binary files, the programs which make it possible to connect and play. Two there are, no more, no less. A login server (realmd) and a world server (mangosd). As its name implies, the login server handles player login, provides the list of available realms, and connects the client to the world server once he has successfully authenticated and chosen a realm. The world server is what makes the fun parts possible. It controls all in-game interactions and communicates with the player clients. It is what allows you to experience the world. It is the underlying laws of nature that govern how the world works. What the world contains is stored in the database. Without a database, the world would be empty, except for the naked players wandering around in the void. The database is the stuff you see in the world. It is the creatures you fight, the quests you go on, the items you struggle to acquire. The atoms the world is made of are defined in the database. All of this comes together to create the World of Warcraft that you play.
The emulator has three major components. The first things you'll encounter are the binary files, the programs which make it possible to connect and play. Two there are, no more, no less. A login server (`realmd`) and a world server (`mangosd`).

As its name implies, the login server handles player login, provides the list of available realms, and connects the client to the world server once he has successfully authenticated and chosen a realm.

The world server is what makes the fun parts possible. It controls all in-game interactions and communicates with the player clients. It is what allows you to experience the world. It is the underlying laws of nature that govern how the world works.

What the world contains is stored in the database. Without a database, the world would be empty, except for the naked players wandering around in the void. The database is the stuff you see in the world. It is the creatures you fight, the quests you go on, the items you struggle to acquire. The atoms the world is made of are defined in the database.

All of this comes together to create the World of Warcraft that you play.

## Progression

What makes vMaNGOS special is that it aims to recreate all content changes throughout Vanilla WoW, starting all the way back from patch 1.2 to the 1.12 you are most familiar with. It is a project for the people who loved all of Vanilla and realize that 1.12 was only the end of the journey. In order to make this journey possible again, we've redesigned the way database data is stored and loaded. We've embraced the fact that things exist not only in space, but in time as well, so all content needs to have an extra field value indicating when this particular version of it came into existence. These values start from 0 for patch 1.2, and go to 10 for patch 1.12. The world server will automatically load the most appropriate version of the content, based on the current patch value that is set in the configuration file. All it takes to change content patches is this one setting. There are no extra SQL files that you need to run in order to change the patch.
What makes VMaNGOS special is that it aims to recreate all content changes throughout Vanilla WoW, starting all the way back from patch 1.2 to the 1.12 you are most familiar with. It is a project for the people who loved all of Vanilla and realize that 1.12 was only the end of the journey.

In order to make this journey possible again, we've redesigned the way database data is stored and loaded. We've embraced the fact that things exist not only in space, but in time as well, so all content needs to have an extra field value indicating when this particular version of it came into existence. These values start from 0 for patch 1.2, and go to 10 for patch 1.12.

The world server will automatically load the most appropriate version of the content, based on the current patch value that is set in the configuration file. All it takes to change content patches is this one setting. There are no extra SQL files that you need to run in order to change the patch.

Another big aspect of the progression system is game client progression. That means being able to play with the patch-appropriate game clients, not just the 1.12 client which every other project sticks to. This endeavor is much more complicated than content progression, as it requires numerous corrections to the way the client and server communicate.

As the game evolved and grew, new features and quality of life improvements were made, which necessitated changes to the way data was stored and handled. In order to support old versions of the client, all changes to the structure of packets exchanged between the server and the client need to be identified and their old implementations reconstructed.

Another requirement for supporting old client versions is to make sure all content added after the targeted patch has the correct minimum patch assigned, as encountering a creature with a model added in a later patch for example will cause the client to crash.

Another big aspect of the progression system is game client progression. That means being able to play with the patch appropriate game clients, not just the 1.12 client which every other project sticks to. This endeavor is much more complicated than content progression, as it requires numerous corrections to the way the client and server communicate. As the game evolved and grew, new features and quality of life improvements were made, which necessitated changes to the way data was stored and handled. In order to support old versions of the client, all changes to the structure of packets exchanged between the server and the client need to be identified and their old implementations reconstructed. Another requirement for supporting old client versions is to make sure all content added after the targeted patch has the correct minimum patch assigned, as encountering a creature with a model added in a later patch for example will cause the client to crash. The upside of doing full client progression however is that you get to experience ALL aspects of that patch, including old talent trees and changes to spells.
The upside of doing full client progression however is that you get to experience **all** aspects of that patch, including old talent trees and changes to spells.

You can see which clients are currently supported in the core repository's readme file. Note that only the last version of each major patch is supported.
You can see which clients are currently supported in the core repository's readme file. Note that only the last version of each major patch is supported.
6 changes: 4 additions & 2 deletions docs/Contribution-guide.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
There are two kinds of changes that can be made - core changes and database changes. A core change is a modification to any of the source code included in the repository, that basically means changes to any of the "_.cpp_" and "_.h_" files. In order to edit the core's source code you'll need to be fluent in the [C++](https://en.wikipedia.org/wiki/C%2B%2B) programming language. Database changes are done by creating new "_.sql_" files called migrations which contain SQL statements that alter the data or structure of database tables. In order to make changes to the database you need to be familiar with the [SQL](https://en.wikipedia.org/wiki/SQL) database management language.
There are two kinds of changes that can be made - core changes and database changes. A core change is a modification to any of the source code included in the repository, that basically means changes to any of the "_.cpp_" and "_.h_" files. In order to edit the core's source code you'll need to be fluent in the [C++](https://en.wikipedia.org/wiki/C%2B%2B) programming language.

Database changes are done by creating new "_.sql_" files called migrations which contain SQL statements that alter the data or structure of database tables. In order to make changes to the database you need to be familiar with the [SQL](https://en.wikipedia.org/wiki/SQL) database management language.

## Making database changes.
To create a migration, navigate to the "_sql_" directory and use the batch script there. The newly created migration can be found in "_sql/migrations_". The name of the migration consists of the date and time when it was created and the database to which it should be applied. By default any migrations created with the batch script are for the world database, but you can change that by just renaming the migrations. Here are a few examples.
Expand Down Expand Up @@ -85,4 +87,4 @@ This creates a new commit with the name specified and all the files you chose to

Uploads all local commits to github.

You may now open a pull request from the website. Remember to give it a good name and a detailed description of what you changed. If it is a solution to an already existing issue on our github repository, then you can just link to the issue it fixes.
You may now open a pull request from the website. Remember to give it a good name and a detailed description of what you changed. If it is a solution to an already existing issue on our github repository, then you can just link to the issue it fixes.
18 changes: 9 additions & 9 deletions docs/Frequently-Asked-Questions.md
Original file line number Diff line number Diff line change
@@ -1,34 +1,34 @@
### How do i run my own server with the code?
### How do I run my own server with the code?

Please read the [Compilation](Compiling-on-Windows.md) and [Configuration](Getting-it-working.md) guides first.
Please read the [Compiling on Windows](Compiling-on-Windows.md) or [Compiling on Linux](Compiling-on-Linux.md) guides first.

### I get an error immediately upon starting my server.

Make sure you are not missing any of the dependency dlls you used to build the binaries. You must copy _ACE.dll_, _tbb.dll_ and _tbbmalloc.dll_ to the server folder. They must be the same version you used when compiling, so if you compiled for x64 then you need the 64-bit versions of those files.
Make sure you are not missing any of the dependency DLLs you used to build the binaries.

### My server shuts itself down almost immediately.

Make sure that MySQL is running and that you are not missing any migrations. The migrations are in the "sql" folder and you have to apply them all before starting the server.

### My server crashes after it gets to Starting Map System.

Make sure you are not missing the maps and vmaps required to run the server. If you compiled for x86, then you must also make sure that map preloading is turned off in the config file, or the server will hit the 32-bit memory limit upon attempting to load them all.
Make sure you are not missing the maps and vmaps required to run the server. If you compiled for x86, then you must also make sure that map preloading is turned off in the config file, or the server will hit the 32bit memory limit upon attempting to load them all.

### There is a lot of spam in my console.

Open the "mangosd.conf" file with notepad and change the _LogLevel_ setting to 0.
Open the "mangosd.conf" file with Notepad and change the _LogLevel_ setting to 0.

### How do i change the content patch?
### How do I change the content patch?

Open the "mangosd.conf" file with notepad and change the _WowPatch_ setting.
Open the "mangosd.conf" file with Notepad and change the _WowPatch_ setting.

### How do i play with a different client build like 1.10?
### How do I play with a different client build like 1.10?

In order to change the targeted client build, you must edit the value of the _SUPPORTED_CLIENT_BUILD_ define in _Progression.h_ before compiling the core.

### I get stuck when trying to connect to my server.

Make sure the server has finished loading. If you can't type in the mangosd console then it's still loading. If you are trying to connect from another computer, then you have to change the realm's ip address to the real ip of the host machine. This can be done in the `realmd` database, inside the `realmlist` table.
Make sure the server has finished loading. If you can't type in the mangosd console then it's still loading. If you are trying to connect from another computer, then you have to change the realm's IP address to the real IP of the host machine. This can be done in the `realmd` database, inside the `realmlist` table.

### I can't enter the Ahn'Qiraj raid.

Expand Down
Loading