Toute les informations sur l'univers de jeu sont générées à partir de formulaires de données écrits sous l'aspect de fichiers xml. Ils sont généralement édités par le biais de Georges Editor mais peuvent également être modifiés par un simple éditeur de texte, comme n'importe quel fichier xml1). Pour se familiariser avec l'aspect de ces données, il est possible d'aller consulter ceux qui sont fournis avec les sources du serveur Ryzom Core dans votre arborescence dans :
code/ryzom/common/data_leveldesign/leveldesign
Les fichiers .dfn et .typ sont dans le sous-répertoire DFN.
Un formulaire contient des éléments formels obligatoires.
Exemple
<?xml version="1.0"?> <FORM Version="0.0" State="modified"> <STRUCT> <ATOM Name="TestVal1" Value="1"/> <ARRAY Name="TestArray"> <ATOM Value="Array Val 1"/> <ATOM Value="Array Val 2"/> </ARRAY> <ARRAY Name="CoolFilesInfo"> <STRUCT> <ATOM Name="ShortName" Value="Tiger Attack"/> <ATOM Name="Ranking" Value="55"/> </STRUCT> <STRUCT> <ATOM Name="ShortName" Value="Crazy Car Jump"/> <ATOM Name="Ranking" Value="40"/> </STRUCT> </ARRAY> <STRUCT Name="PositionData"> <ATOM Name="x" Value="1"/> <ATOM Name="y" Value="1"/> <ATOM Name="z" Value="2"/> </STRUCT> </STRUCT> </FORM>
La première chose à indiquer est le type de fichier :
<?xml version="1.0"?>
Il faut ensuite,dans l'ordre :
Pour pouvoir créer des formulaires, on va se baser sur un système de parentage et d'héritage.
Un formulaire nécessite un fichier de définition au minimum (.dfn), la première définition chargée se basant sur l'extension du nom du formulaire.
Exemple
Si vous créez un formulaire qui s'appelle exemple.config_data, Georges chargera la définition config_date.dfn (et donc toutes les définitions et types qu'elle contient) avant d'exécuter ce formulaire de données.
Commençons donc par voir comment établir les Définitions (fichiers .dfn) et les Types (fichiers .typ).
Il existe deux types essentiels : les .typ (type) et les .dfn (définition).
Les Définitions s'expriment elles-mêmes à l'aide de Types.
Les fichiers .dfn et .typ les plus basiques sont classés dans les sources de Ryzom Core dans :
/code/ryzom/common/data_leveldesign/leveldesign/DFN/basics
Les Types sont les plus petits blocs d'information qui puissent être enregistrés dans un formulaire Georges. Avant de pouvoir définir des données plus complexes, il est essentiel de mettre en place les types les plus basiques. Créer de tels documents manuellement permet de mieux en comprendre le fonctionnement.
Exemple 1 : int.typ, entier
<?xml version="1.0"?> <TYPE Type="SignedInt" UI="EditSpin" Default="0" Min="-9223372036854775808" Max="9223372036854775807"> </TYPE>
Exemple 2 : boolean.typ, booléen
<?xml version="1.0"?> <TYPE Type="String" UI="NonEditableCombo" Default="false"> <DEFINITION Label="true" Value="true"/> <DEFINITION Label="false" Value="false"/ </TYPE>
On le voit dans ces deux exemples, le formulaire Georges .typ contient tout d'abord :
<?xml version="1.0"?>
Puis un élément “TYPE”, qui doit être unique, s'ouvrant par <TYPE> et se fermant par </TYPE>.
Il contient lui-même éventuellement un ou plusieurs éléments “DEFINITION”, : <DEFINITION Label=“” Value=“”/>
Il est possible d'ajouter également un élément “COMMENT” pour donner des indications générales et/ou “LOG” pour garder trace des changements.
Les TYPEs peuvent avoir les caractéristiques suivantes :
Le genre de données renvoyé peut avoir plusieurs valeurs possibles :
Les UI reconnues par Georges et pour lesquelles il saura traiter les données sont :
Chaque élément DEFINITION possède :
Notre fichier .typ de base doit donc ressembler à ça :
<?xml version="1.0"?> <TYPE Type="UnsignedInt/SignedInt/Double/String" UI="Edit/EditSpin/NonEditableCombo/FileBrowser/BigEdit/ColorEdit" [Default=""] [Min=""] [Max=""] [Increment=""]> <DEFINITION Label="" Value=""/> <DEFINITION Label="" Value=""/> <COMMENTS></COMMENTS> <LOG>Mon Jan 01 00:00:00 0000 (god) Light, please !</LOG> </TYPE>
Les Définitions indiquent les STRUCT (structures), ARRAY (tableaux) et ATOM (atomes) utilisables dans les formulaires et le type d'information qu'elles fournissent.
UN fichier .dfn se compose de deux éléments :
Exemple
<?xml version="1.0"?> <DFN> <ELEMENT Name="TestVal1" Type="Type" Filename="int.typ" Default="0"/> <ELEMENT Name="TestVal2" Type="Type" Filename="int.typ" Default="0"/> <ELEMENT Name="WriteVal" Type="Type" Filename="int.typ" Default="0" /> <ELEMENT Name="TestArray" Type="Type" Filename="string.typ" Array="true"/> <ELEMENT Name="CoolFilesInfo" Type="Dfn" Filename="coolfilesinfo.dfn" Array="true"/> <ELEMENT Name="TestByBracket" Type="Type" Filename="boolean.typ" Array="true"/> <ELEMENT Name="PositionData" Type="Dfn" Filename="positiondata.dfn" Array="false" /> </DFN>
Là encore, le formulaire Georges .dfn contient tout d'abord :
<?xml version="1.0"?>
Puis on voit <DFN></DFN> qui encadra des <ELEMENTS […] />
Les ELEMENTS sont les parties les plus sensibles d'une définition car ils varient grandement selon le type de données qu'ils peuvent contenir. Ils contiennent à la base :
Le type peut être :
Une ligne de ce genre donnera donc :
<ELEMENT Name="TestVal1" Type="Type" Filename="int.typ" Default="0"/>
Une ligne de ce genre donnera donc :
<ELEMENT Name="PositionData" Type="Dfn" Filename="positiondata.dfn" Array="false" />
Une ligne de ce genre donnera donc :
<ELEMENT Name="TestArray" Type="Type" Filename="string.typ" Array="true"/>
Une ligne de ce genre donnera donc :
<ELEMENT Name="CoolFilesInfo" Type="Dfn" Filename="coolfilesinfo.dfn" Array="true"/>
Le fichier sample_config.dfn tel qu'il a été mis en place permettra donc au fichier default.sample_config (présenté au début de cette page) de fonctionner car il définit les ATOM, STRUCT et ARRAY que ce Formulaire utilise.