Create a universe
In this section, we will discuss the data that allows a universe to exist!(Unlike the server system which makes it possible for the universe to be available for the client that connects to it).
The different types of data used
Base MySQL
This database system is used for services and the administration of the server, this does not therefore directly concern the world EXCEPT the determination of player accounts and their privileges.
The Georges Sheets
These files(stored in sources in code/ryzom/common/data_leveldesign/leveldesign) contains the definition of all the elements to be defined, like: objects, spells, creatures… and also the basic encyclopedia which contains all the definitions of all the elements that can be called, and importantly all the bricks that will be used to build the world.
Ryzom Core stores data in the form of “xml” files(with variable extensions, like: .txt, .dfn, .cfg, .continent etc…
They are designed to adopt a “hierarchy and parenting” that allows the increasing accuracy of the different elements.
These xml files can be edited manually, but there is an dedicated editor: Georges Editor.
Once defined, these files are compressed into packed sheets files, this is a compact binary version for use by the game server. If you delete the files, the server will recreate them at startup!
The Primitives
Once all your items, spells, actions, and skills are defined in the Georges Sheets, you have to assemble all the “bricks” for world making. This is a job for the World Editor!! This one is much more than a software for map creation, because it also makes it possible to compose the world in sections.
Once again, the data is stored as xml files, with different extensions depending on their destination. The server stores them in code/ryzom/common/data_leveldesign/primitives.
Now, This is where it becomes possible to create a specific character that's assigned to a task in a given place. This is because the different bricks(composed in the Georges Sheets) are used for this purpose. The hierarchy system allows you to define groups of NPCs, creatures, and so on in a nice and tidy manner… so you then can place elements of these groups without having to redefine(individually) each object/creature/character.
Again, the server generates the packed sheets at startup in case it is missing.
The Persistent Data Record
With the Georges Sheets and Primitives, we get a “world state” when the server starts(for the moment 0). But it will immediately change(begin to live) because of the players through their characters, modifications made, interaction etc… To save the world's evolution, and keeping the memory of the last state of each and every thing, the Ryzom Core server write files to the disk(without going through a database system).
This is where all the: characters, guilds, inventories, creatures position, quest statuses are stored…
This kind of data is stored in code/ryzom/server/save_shard, in the form of binary files.
Although, this is not normally necessary, because it is possible to edit the data using the pdr_util utility, which transforms the binary “pdr” into an “editable xml”. It can then be reassembled with the same tool. This can be used to massively update data on a large number of characters or creatures.
Let's take a sample file: code/ryzom/server/save_shard/characters/001/account_1_0_pdr.bin.
We see that we are in the part devoted to the characters(“characters” in English). The subfolder, 001, is used only to prevent too much data from being stored in the same directory, so the system automatically organizes them into sub directories. Then we see “account”, this means a player account, then “1”, means account with ID 1. Then we read 0, this is the first character slot(out of 4 possible ). Ie: This binary file contains all the data of the first character of the server's first player: inventory, position, skills etc.