Logo Khaganat

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
fr:toutcommenceparlereseau [2020/08/22 14:22] – [Étape 0 : Enregistrer un nouveau compte] PreWRAP sur le code YannKfr:toutcommenceparlereseau [2021/12/03 19:19] (Version actuelle) – modification externe 127.0.0.1
Ligne 53: Ligne 53:
 Ce qui suit n'est pas clair. Je propose une reformulation, mais je n'ai peut-être pas tout compris. Ce qui suit n'est pas clair. Je propose une reformulation, mais je n'ai peut-être pas tout compris.
  
- --- //[[wiki:user:zatalyz|zatalyz]] 2020/08/21 12:58//+ --- //[[user:zatalyz|zatalyz]] 2020/08/21 12:58//
 </WRAP> </WRAP>
 +
 +<WRAP center round help 60%>
 +Mise à jour afin de voir si cela convient
 + --- //[[user:aleajactaest|aleajactaest]] 2021/01/12 20:45//
 +</WRAP>
 +
 +On lance une requette WEB avec la forme suivante
  
 Le lien dans l'interface web sera de la forme suivante : Le lien dans l'interface web sera de la forme suivante :
Ligne 67: Ligne 74:
   * ''email'' : un email   * ''email'' : un email
   * ''tac'' : toujours ''on'' (pour dire que la licence est acceptée)   * ''tac'' : toujours ''on'' (pour dire que la licence est acceptée)
 +
 +
 +Exemple:
 +
 +   https://khaganat.net/ams/index.php?page=register&Username=joueurdetest&Password=jenetedonnepasmonmotdepasse&Email=joueurdetest@khaganat.net&TaC=on&function=add_user
  
  
Ligne 90: Ligne 102:
 **1. Client -> Serveur** **1. Client -> Serveur**
  
-Demande le grain de sable((Le sel du mot de passe? Je ne suis pas sûre de comprendre...  --- //[[wiki:user:zatalyz|zatalyz]] 2020/08/21 12:58//)) (clef à utiliser pour l'envoi du mot de passe).+Demande un mot clef pour permettre le salage du mot de passe.(( nous allons renvoyer le mot de passe via une fonction de hachage, à chaque fois le serveur va renvoyer un mot de clef différent, le hachage aura comme source le mot de passe et le mot clef du serveur, le client enverra donc un hachage différentAvec cette méthode, on rend plus difficile la recherche du mot de passe --- //[[user:aleajactaest|aleajactaest]] 2020/11/28 21:20//))
  
 URL formatée de la façon suivante : URL formatée de la façon suivante :
Ligne 409: Ligne 421:
 N'ayant pas la signification exacte, je considère que tout a le même niveau (bref on lit au fil de l'eau). N'ayant pas la signification exacte, je considère que tout a le même niveau (bref on lit au fil de l'eau).
  
-On lit les trois paquets (A, B & C, ici tous nommé Z)+On lit les trois paquets (A, B & C, que j'ai converti/nommé Z), car je ne vois pas très bien l'interet d'avoir trois niveaux, sachant qu'après on remet tout au même niveau, peut-etre un optimisation pour les reprises suite à la perte de paquet)
  
  
Ligne 417: Ligne 429:
     +---------+      +----------+----------+----------+     +---------+      +----------+----------+----------+
  
-Puis pour chaque paquet Z on lit paquet Z((Ici, je ne suis pas sûre de mon ajout de ''Z'', mais sinon il doit manquer un truc pour comprendre ?  --- //[[wiki:user:zatalyz|zatalyz]] 2020/08/21 12:58//)) (tant que ''next'' égale 1, on continue de lire) +Puis pour chaque paquet Z on lit le champ ''next'' et si ert à '1' on lit ActionFactory Xpuis on lit ''next'' suivant
  
     +----------+     +-------+-----------------+-------+-----------------+-------+     +----------+     +-------+-----------------+-------+-----------------+-------+
-    | Packet Z |     | next  | ActionFactory | next  | ActionFactory | next  | . . .+    | Packet Z |     | next  | ActionFactory | next  | ActionFactory | next  | . . .
     | X bits   | --> | 1 bit | X bits          | 1 bit | X bits          | 1 bit |     | X bits   | --> | 1 bit | X bits          | 1 bit | X bits          | 1 bit |
     +----------+     +-------+-----------------+-------+-----------------+-------+     +----------+     +-------+-----------------+-------+-----------------+-------+
Ligne 445: Ligne 457:
     +------+    +-----------+---------------------------+     +------+    +-----------+---------------------------+
  
-=== Action ===+  Voir la section Action pour ActionCode. 
 + 
 + 
 +==== Paquet envoyé par le client ==== 
 + 
 +<WRAP> 
 +Il faut remarqué ici, que la taille d'un paquet envoyé par le client est limité, si on dépasse, le serveur ignore le message. 
 +</WRAP> 
 + 
 +=== Corps du message === 
 + 
 +    +-------------------+------------+--- 
 +    | CurrentSendNumber | SystemMode | . . . 
 +    |    32 bits        |  1 bit     | 
 +    +-------------------+------------+--- 
 +                           1 -> system mode 
 +                           0 -> normal mode 
 + 
 + 
 + 
 +  * CurrentSendNumber : un compteur qui s'incrémente tout le temps (permet d'ignorer les messages passés). <wrap hi>Attention: quand le compteur aura atteint le maximum, le client va refuser tous les messages.</wrap> 
 +  * SystemMode : Informe que le type de message est dit "système" ou "normal"
 + 
 + 
 +=== Message système === 
 + 
 + 
 +    +-------------------+------------+---------+--- 
 +    | CurrentSendNumber | SystemMode | Message | . . . 
 +    |    32 bits        |  1 bit     | 8 Bits  | 
 +    +-------------------+------------+---------+--- 
 +    |  xxxxxxxxxxxxxxxx |          | 
 + 
 +Suivant la valeur du message, nous avons des paramètres spécifiques. 
 + 
 +Notez qu'ici nous utilisons 8 bits, on aurait pu réduire la taille afin d'être en adéquation avec les messages envoyés. 
 + 
 +À savoir qu'il y a 5 types de messages provenant du client & 5 types de messages provenant du serveur, soit une taille de 3 bits. 
 + 
 +== Message 0 : SYSTEM_LOGIN_CODE == 
 +Message émis par le client. 
 + 
 +    +-------------------+------------+---------+-----------+----------+----------+-------- / ---------+ 
 +    | CurrentSendNumber | SystemMode | Message | User Addr | User Key | User ID  | Langue             | 
 +    |    32 bits        |  1 bit     | 8 Bits  | 32 bits   | 32 bits  | 32 bits  | String    (x bits) | 
 +    |                              |         | unsigned  | unsigned | unsigned |                    | 
 +    +-------------------+------------+---------+-----------+----------+----------+-------- / ---------+ 
 +    |  xxxxxxxxxxxxxxxx |          |    0    |       xxx |      xxx |      xxx |                xxx | 
 + 
 + 
 + 
 +== Message 2 : SYSTEM_ACK_SYNC_CODE == 
 +Message émis par le client. 
 +Message utilisé pour acquitter d'une demande de synchronisation. 
 + 
 +    +-------------------+------------+---------+-----------+----------+-----------------+----------+ 
 +    | CurrentSendNumber | SystemMode | Message | frontack  | backack  | longackbitfield | syncCode | 
 +    |    32 bits        |  1 bit     | 8 Bits  | 32 bits   | 32 bits  | 1024 bits       | 32 bits  | 
 +    |                              |         | unsigned  | unsigned | unsigned        | unsigned | 
 +    +-------------------+------------+---------+-----------+----------+-----------------+----------+ 
 +    |  xxxxxxxxxxxxxxxx |          |    2    |       xxx |      xxx |             xxx |      xxx | 
 + 
 +  * ''frontack'' : dernier message reçu (''last_received_number''
 +  * ''backack''  : ''last_ack_in_long_ack'' 
 +  * ''longackbitfield'' : suite de bit qui indique les messages normaux reçus (permettra de faire une synchronisation avec le serveur) 
 +  * ''syncCode'' : ''_server_sync'' 
 + 
 + 
 +== Message 4 : SYSTEM_ACK_PROBE_CODE == 
 +Message émis par le client. 
 + 
 +Acquitte des messages PROBE envoyés. 
 + 
 +    +-------------------+------------+---------+-------------+---------+---------+-- / --+---------+ 
 +    | CurrentSendNumber | SystemMode | Message | Taille : X  | Probe 1 | Probe 2 |       | Probe X | 
 +    |    32 bits        |  1 bit     | 8 Bits  | 32 bits     | 32 bits | 32 bits |       | 32 bits | 
 +    |                              |         | signed      | signed  | signed  |       | signed 
 +    +-------------------+------------+---------+-------------+---------+---------+-- / --+---------+ 
 +    |  xxxxxxxxxxxxxxxx |          |    4    | 
 + 
 + 
 +== Message 5 : SYSTEM_DISCONNECTION_CODE == 
 +Message émis par le client. 
 + 
 +    +-------------------+------------+---------+ 
 +    | CurrentSendNumber | SystemMode | Message | 
 +    |    32 bits        |  1 bit     | 8 Bits  | 
 +    |                              |         | 
 +    +-------------------+------------+---------+ 
 +    |  xxxxxxxxxxxxxxxx |          |    5    | 
 + 
 + 
 +== Message 8 : SYSTEM_QUIT_CODE == 
 +Message émis par le client. 
 + 
 +    +-------------------+------------+---------+---------+ 
 +    | CurrentSendNumber | SystemMode | Message | Quit Id | 
 +    |    32 bits        |  1 bit     | 8 Bits  | 32 bits | 
 +    |                              |         | signed 
 +    +-------------------+------------+---------+---------+ 
 +    |  xxxxxxxxxxxxxxxx |          |    8    | 
 + 
 + 
 +  
 +=== Message normal === 
 + 
 + 
 +    +-------------------+------------+---- 
 +    | CurrentSendNumber | SystemMode | . . . 
 +    |    32 bits        |  1 bit     |  
 +    +-------------------+------------+---- 
 +    |  xxxxxxxxxxxxxxxx |          | 
 + 
 +À remplir. 
 + 
 +===== Les différents groupes de données ===== 
 + 
 +==== Action ====
  
 Nous avons différents type ''Action'': Nous avons différents type ''Action'':
Ligne 584: Ligne 713:
  
  
-=== Impulse ===+==== Impulse ==== 
 + 
 +=== Comment ça marche ===
  
 Ici, nous allons utilisé la structure ''msg.xml'' pour pouvoir décoder le message. Le décodage demande d'abord de comprendre comment lire le fichier ''msg.xml''. Ici, nous allons utilisé la structure ''msg.xml'' pour pouvoir décoder le message. Le décodage demande d'abord de comprendre comment lire le fichier ''msg.xml''.
Ligne 654: Ligne 785:
  
  
-== Décodage Impulse == 
  
-Les messages impulses sont construits suivant le format suivant : +== Lecture du fichier database.xml ==
- * premier champ contenant le code ''impulse'' +
- * champs suivants : les paramètres du code ''impulse''+
  
-Cela donne le schéma suivant :+En complément des messages provenant de msg.xml, nous avons une autre référence database.xml qui a un mode de fonctionnement un peu différent. 
 +Certainne commande Impulse (msg.xml), auront un message encodé via database.xml
  
-    +--------------+---- / -----+ +Structure du fichier:
-    | code msg.xml | paramètres | +
-    | x bits       | x bits     | +
-    | unsigned                [ +
-    +--------------+---- / -----++
  
-== STRING_MANAGER:RELOAD_CACHE ==+<code xml>    <database_description> 
 +      <bank_superclass> 
 +        <!-- dans cette zone existe des informations non utilisés par le client --> 
 +      </bank_superclass> 
 +      <branch name=x1 bank="PLR" clientonly="1"> 
 +         <leaf name=x2 type=t1/> 
 +      </branch> 
 +      <branch name=x3 bank="PLR" count="c3"> 
 +         <leaf name=x4 type=t4/> 
 +         <leaf name=x5 type=t5/> 
 +      </branch> 
 +      <branch name=x6 bank="PLR" atom="1"> 
 +         <branch name=x7 atom="1" count="c7"> 
 +           <leaf name=x8 type=t8/> 
 +           <leaf name=x9 type=t9/> 
 +           <leaf name=x10 type=t10/> 
 +         </branch> 
 +         <leaf name=x11 type=t11/> 
 +         <leaf name=x12 type=t12/> 
 +         <leaf name=x13 type=t13/> 
 +         <leaf name=x14 type=t14/> 
 +      </branch> 
 +    </database_description> 
 +</code>
  
-Commande utilisée pour initialiser le tableau de message.+Nous trouvons le mot de clef branch, que l'on va traduire par branche, et le mot de clef leaf que l'on traduit par feuille.
  
-Ici, on vérifie que notre tableau interne au client a la même date que le tableau du serveurSinonon efface le tableau interne du client, et à chaque nouveau message le client demandera à quoi il correspond.+Ici le premier niveau qui nous interrese est database_descriptionpuis ensuite on ne garde que les branches ayant le parametre bank égale "PLR". 
 +Pour la partie branchecet élément peut contenir d'autres branches (zero, une, ..., X) et/ou des feuilles (de 0, 1 ou X). Dans sa structure interne, ces deux entités (branches & feuilles) sont séparées, et on regardera d'abord dans les branches puis ensuite dans les feuilles.
  
-Code actuel : ''STRING_MANAGER:RELOAD_CACHE => 011011.100''+Si une branch contient le mot de clef "count", cela implique une duplication de cette branche X fois (avec pour nom le numéro de position commençant par 0)
  
-<WRAP center round important 60%> +Ensuite, nous avons la possibilité d'avoir le mot clef 'atom', s'il est à 1cela implique une gestion différente de l'agragation des données. (dans ce cas, on considère que l'on aura une structure pouvant envoyer toutes les données [dans en premier temps on envoie un booléen pour chaque feuille disponible dans la branche/sous-branche, puis pour chaque booléen ayant la valeur 1/Vrai, on lira la donnée de la feuille correspondante)
-Attention : dépend de la version que vous avez de ''msg.xml'', susceptible de changer ! +
-</WRAP>+
  
 +L'association de count & atom m'a particulièrement posé des problèmes, dans les fait 'count' est prioritaire, ensuite on gère le cas de 'atom'.
  
-    +----------------+--------------+------------------+ +Un petit exemple:
-    | STRING_MANAGER | RELOAD_CACHE | timestamp        | +
-    | 6 bits         | 3 bits       | uint32           | +
-    | 011011         | 100          | 32 bits unsigned | +
-    +----------------+--------------+------------------++
  
-   * ''timestamp (uint32)'' : date du tableau de message+<code xml>    <database_description> 
 +       <branch name="Entities" 
 +               bank="PLR" 
 +               clientonly="1"> 
 +          <branch name="E" 
 +                  count="2"> 
 +             <leaf name="P" 
 +                   count="3" 
 +                   type="I8" /> 
 +          </branch> 
 +       </branch>
  
 +       <branch name="USER"
 +              bank="PLR"
 +              atom="1">
 +        <leaf name="HAIR_TYPE"
 +              type="I8" />
 +          <branch name="SKILL_POINTS_"
 +                  count="4">
 +              <leaf name="VALUE"
 +                    type="I32" />
 +          </branch>
 +          <branch name="FACTION_POINTS_"
 +                  count="7">
 +              <leaf name="VALUE"
 +                    type="I32" />
 +          </branch>
 +       </branch>
  
-== STRING_MANAGER:PHRASE_SEND ==+       <branch name="GROUP" 
 +              bank="PLR"> 
 +        <branch name="" 
 +                count="5" 
 +                atom="1"> 
 +          <leaf name="PRESENT" 
 +                type="I1" /> 
 +          <leaf name="UID" 
 +                type="I20" /> 
 +        </branch> 
 +      </branch> 
 +    </database_description> 
 +</code>
  
-Le serveur envoie un message, plus précisément le pointeur sur le message.+<code> 
 + * Entities 
 +      * E0 
 +         * P0 (type : I8) 
 +         * P1 (type : I8) 
 +         * P2 (type : I8) 
 +      * E1 
 +         * P0 (type : I8) 
 +         * P1 (type : I8) 
 +         * P2 (type : I8) 
 + * USER (Atom) 
 +   * SKILL_POINTS_0 
 +     * VALUE (type : I32) 
 +   * SKILL_POINTS_1 
 +     * VALUE (type : I32) 
 +   * SKILL_POINTS_2 
 +     * VALUE (type : I32) 
 +   * SKILL_POINTS_3 
 +     * VALUE (type : I32) 
 +   * FACTION_POINTS_0 
 +     * VALUE (type : I32) 
 +   * FACTION_POINTS_1 
 +     * VALUE (type : I32) 
 +   * FACTION_POINTS_2 
 +     * VALUE (type : I32) 
 +   * FACTION_POINTS_3 
 +     * VALUE (type : I32) 
 +   * FACTION_POINTS_4 
 +     * VALUE (type : I32) 
 +   * FACTION_POINTS_5 
 +     * VALUE (type : I32) 
 +   * FACTION_POINTS_6 
 +     * VALUE (type : I32) 
 + * GROUP 
 +   * 0 (Atom) 
 +     * PRESENT (Type : I1 == Booléen) 
 +     * UID (Type I20) 
 +   * 1 (Atom) 
 +     * PRESENT (Type : I1 == Booléen) 
 +     * UID (Type I20) 
 +   * 2 (Atom) 
 +     * PRESENT (Type : I1 == Booléen) 
 +     * UID (Type I20) 
 +   * 3 (Atom) 
 +     * PRESENT (Type : I1 == Booléen) 
 +     * UID (Type I20) 
 +   * 4 (Atom) 
 +     * PRESENT (Type : I1 == Booléen) 
 +     * UID (Type I20) 
 +</code>
  
-Code actuel ''STRING_MANAGER:PHRASE_SEND => 011011.001''+Par exemple le message suivant : 
 +00.0.10.11111111 
 +  * 00 <Entities> le 1er nieveau est sur 2 bit (on a trois elements 0,1 & 2) => 2 bit pour sélectionner celui que l'on veut. 
 +  * 0 :  <E0> le 2ème niveau, nous avons ici le choix entre E0 & E1, (1 bit suffit pour trouver l'élément) 
 +  * 10 : <P1> le 3ème niveau, nous avons ici le choix entre P0, P1 & P2 (2 bits suffisent pour trouver l'élément) 
 +  * 11111111 : <I8> le 4ème niveau, la valeur de la branche 
 +  * Résumé : 
 +    * Entities:E0:P1 = 255 
 +   
 +2ème exemple : 
 +01.0010100.11111111111111111111111111111111.01111111111111111111111111111111
  
-<WRAP center round important 60%> +  * 01 : <USERle 1er nieveau est sur 2 bit (on a trois elements 0,1 & 2) => 2 bit pour sélectionner celui que l'on veut. 
-Attention : dépend de la version que vous avez de ''msg.xml''susceptible de changer ! +  * 0010100 : <SKILL_POINTS_2,SKILL_POINTS_4> USER est du type atom, donc on compte le nombre de tous les feuilles ici 7, et pour chaque bit à 1, on doit récupèrer la valeur 
-</WRAP+  * 11111111111111111111111111111111 : <VALUE4294967295 
-    +----------------+--------------+------------------+------------------+ +  * 01111111111111111111111111111111 : <VALUE> 2147483647 
-    | STRING_MANAGER | PHRASE_SEND  | dyn_id           | string_id        | string_id . . . +  * Résumé: 
-    | 6 bits         | 3 bits       | uint32           | uint32           | tant que l'on a au moins 32 bits, on lit un autre string_id +    * USER.SKILL_POINTS_2 = 4294967295 
-    | 011011         | 001          | 32 bits unsigned | 32 bits unsigned | +    * USER.SKILL_POINTS_4 = 2147483647
-    +----------------+--------------+------------------+------------------++
  
-   * ''dyn_id'' (Uint32) l'ID du groupe de message +3ème exemple 
-   * ''string_id'' (Uint32) : le pointeur sur le message+10.010.0.1
  
 +  * 10 : <GROUP> le 1er nieveau est sur 2 bit (on a trois elements 0,1 & 2) => 2 bit pour sélectionner celui que l'on veut.
 +  * 010 : <2>  La branche suivante à count à 5, donc on doit lire 3 bits pour savoir qu'elle est l'element
 +  * 0 : <PRESENT>
 +  * 1 : VALUE  = 1  
  
-== STRING_MANAGER:STRING_RQ ==+  
 +Les types : 
 +  * Ixxx : Entier non signé ou xxx et le nombre de bit à récupèrer 
 +  * Sxxx : Entier signé, ou xxx et le nombre de bit à récupèrer 
 +  * TEXT : Entier non-signé de 32 bit (dont le bit de poids fort est forcé à zero (jamais négatif - si signé) 
  
-Le client demande le message complet en fonction du pointeur. 
  
-Code actuel : ''STRING_MANAGER:STRING_RQ => 011011.010''. 
  
-    +----------------+--------------+------------------+ 
-    | STRING_MANAGER | STRING_RQ    | string_id        | 
-    | 6 bits         | 3 bits       | uint32           | 
-    | 011011         | 010          | 32 bits unsigned | 
-    +----------------+--------------+------------------+ 
  
-   * ''string_id'' (Uint32) : le pointeur sur le message 
  
-Le serveur va répondre à ce message par ''STRING_MANAGER:STRING_RESP''.+== Décodage Impulse ==
  
-== STRING_MANAGER:STRING_RESP ==+Les messages impulses sont construits suivant le format suivant : 
 + * premier champ contenant le code ''impulse'' 
 + * champs suivants : les paramètres du code ''impulse''
  
-Le serveur renvoie le message complet.+Cela donne le schéma suivant :
  
-Code actuel : ''STRING_MANAGER:STRING_RESP => 011011.011''.+    +--------------+---- / -----+ 
 +    | code msg.xml | paramètres | 
 +    | x bits       | x bits     | 
 +    | unsigned                [ 
 +    +--------------+---- / -----+
  
-    +----------------+--------------+------------------+--------------+ +=== Commande impulse ===
-    | STRING_MANAGER | STRING_RESP  | string_id        | MessageUtf8 +
-    | 6 bits         | 3 bits       | uint32           | String-UTF-8 | +
-    | 011011         | 011          | 32 bits unsigned | X bits       | +
-    +----------------+--------------+------------------+--------------++
  
-   * ''string_id'' (Uint32) le pointeur sur le message. +== TARGET:PARTY ==
-   * ''MessageUtf8'' (String-UTF-8) : la chaîne de caractère en UTF-8.+
  
-On remarque ici l'utilisation de la chaîne de caractère au format UTF-8 (alors qu’ailleurs nous avons UTF-16).+== TARGET:INVENTORY ==
  
 +== TARGET:FOLLOW ==
  
-== CONNECTION:ASK_NAME == +== TARGET:NO_FOLLOW ==
- +
-Le client donne le nom et son ID (zone ?) et demande une vérification côté serveur. +
- +
-Code actuel : ''CONNECTION:ASK_NAME => 000001.01010''+
- +
-<WRAP center round important 60%> +
-Attention : dépend de la version que vous avez de msg.xml, suceptible de changer. +
-</WRAP> +
- +
-    +----------------+--------------+------------------+------------------+ +
-    | CONNECTION     | ASK_NAME     | Name             | HomeSessionId    | +
-    | 6 bits         | 5 bits       | X bits           | Uint32           | +
-    | 000001         | 01010        | String-UTF-16    | 32 bits unsigned | +
-    +----------------+--------------+------------------+------------------+ +
- +
- +
-   * Name (String-UTF-16) +
-   * HomeSessionId (Uint32) +
- +
-Retour attendu : ''CONNECTION:VALID_NAME''+
- +
- +
-== CONNECTION:VALID_NAME == +
- +
-Le serveur répond à une requête ''CONNECTION:ASK_NAME''+
- +
- +
-Code actuel : ''CONNECTION:VALID_NAME => 000001.01011'' +
- +
-<WRAP center round important 60%> +
-Attention: dépend de la version que vous avez de msg.xml, susceptible de changer.</WRAP> +
- +
- +
-    +----------------+--------------+-----------------+ +
-    | CONNECTION     | VALID_NAME   | valide          | +
-    | 6 bits         | 5 bits       | 8 bits          | +
-    | 000001         | 01011        | 8 bits unsigned | +
-    +----------------+--------------+-----------------+ +
- +
- +
-   * valide (Uint8) : 1 => valide, sinon non valide +
- +
- +
-== CONNECTION:SELECT_CHAR == +
- +
-Le client sélectionne un personnage. +
- +
-Code actuel : ''CONNECTION:SELECT_CHAR => 000001.00100''+
- +
-<WRAP center round important 60%> +
-Attention: dépend de la version que vous avez de msg.xml, susceptible de changer. +
-</WRAP> +
- +
- +
-    +----------------+--------------+-----------------+ +
-    | CONNECTION     | SELECT_CHAR  | SelectCharMsg   | +
-    | 6 bits         | 5 bits       | 8 bits          | +
-    | 000001         | 00100        | 8 bits unsigned | +
-    +----------------+--------------+-----------------+ +
- +
- +
-   * SelectCharMsg (Uint8) : id du personnage (entre 0 et 4, actuellement on ne peut avoir que 5 personnages maximum) +
- +
-En retour de cette commande, le serveur va répondre ''CONNECTION:USER_CHAR''+
  
 == CONNECTION:USER_CHAR == == CONNECTION:USER_CHAR ==
Ligne 840: Ligne 1017:
  
  
-== CONNECTION:READY ==+== CONNECTION:NO_USER_CHAR ==
  
-Le serveur informe au client qu'il est prêt, puis le client informe ensuite au serveur qu'il est prêt.+== CONNECTION:USER_CHARS ==
  
-Code actuel : ''CONNECTION:READY => 000001.01000''. 
- 
-<WRAP center round important 60%> 
-Attention : dépend de la version que vous avez de msg.xml, susceptible de changer. 
-</WRAP> 
- 
- 
-    +------------+------------+--------------+ 
-    | CONNECTION | READY      | LanguageCode | 
-    | 6 bits     | 5 bits     | String       | 
-    | 000001     | 01000      |              | 
-    +------------+------------+--------------+ 
- 
-   * LanguageCode (String) 
- 
- 
-== CONNECTION:USER_CHARS == 
  
 Liste tous les paramètres de l'utilisateur, les personnages, les domaines, ... Liste tous les paramètres de l'utilisateur, les personnages, les domaines, ...
Ligne 908: Ligne 1068:
  
 == CONNECTION:CREATE_CHAR == == CONNECTION:CREATE_CHAR ==
 +
  
 Création d'un nouveau personnage. Création d'un nouveau personnage.
Ligne 959: Ligne 1120:
  
  
-== GUILD:USE_FEMALE_TITLES ==+== CONNECTION:SELECT_CHAR ==
  
-Le serveur signale que la guilde((Le MMORPG utilise un système de "guilde". Voir l'évolution en "[[fr:gamedesign:khanat:start#communaute|organisation]]" pour Khaganat)) utilise le féminin dans les titres.+Le client sélectionne un personnage.
  
-Code actuel : ''GUILD:USE_FEMALE_TITLES => 011100.10010''+Code actuel : ''CONNECTION:SELECT_CHAR => 000001.00100''
 + 
 +<WRAP center round important 60%> 
 +Attention: dépend de la version que vous avez de msg.xml, susceptible de changer. 
 +</WRAP> 
 + 
 + 
 +    +----------------+--------------+-----------------+ 
 +    | CONNECTION     | SELECT_CHAR  | SelectCharMsg   | 
 +    | 6 bits         | 5 bits       | 8 bits          | 
 +    | 000001         | 00100        | 8 bits unsigned | 
 +    +----------------+--------------+-----------------+ 
 + 
 + 
 +   * SelectCharMsg (Uint8) : id du personnage (entre 0 et 4, actuellement on ne peut avoir que 5 personnages maximum) 
 + 
 +En retour de cette commande, le serveur va répondre ''CONNECTION:USER_CHAR''
 + 
 + 
 +== CONNECTION:DELETE_CHAR == 
 + 
 +== CONNECTION:RENAME_CHAR == 
 + 
 +== CONNECTION:ENTER == 
 + 
 +== CONNECTION:READY == 
 + 
 +Le serveur informe au client qu'il est prêt, puis le client informe ensuite au serveur qu'il est prêt. 
 + 
 +Code actuel : ''CONNECTION:READY => 000001.01000''.
  
 <WRAP center round important 60%> <WRAP center round important 60%>
Ligne 969: Ligne 1159:
 </WRAP> </WRAP>
  
-    +------------+-------------------+--------------------+ 
-    | GUILD      | USE_FEMALE_TITLES | UseFemaleTitles    | 
-    | 6 bits     | 5 bits            | bool               | 
-    | 011100     | 10010             | 1 bit              | 
-    +------------+-------------------+--------------------+ 
  
-   UseFemaleTitles (bool) : 1 = OuiNon+    +------------+------------+--------------+ 
 +    | CONNECTION | READY      | LanguageCode | 
 +    | 6 bits     | 5 bits     | String       | 
 +    | 000001     | 01000      |              | 
 +    +------------+------------+--------------+ 
 + 
 +   LanguageCode (String) 
 + 
 + 
 +== CONNECTION:TIME_DATE_SYNCHRO == 
 + 
 +== CONNECTION:ASK_NAME == 
 + 
 +Le client donne le nom et son ID (zone ?) et demande une vérification côté serveur. 
 + 
 +Code actuel : ''CONNECTION:ASK_NAME => 000001.01010''
 + 
 +<WRAP center round important 60%> 
 +Attention : dépend de la version que vous avez de msg.xml, suceptible de changer. 
 +</WRAP> 
 + 
 +    +----------------+--------------+------------------+------------------+ 
 +    | CONNECTION     | ASK_NAME     | Name             | HomeSessionId    | 
 +    | 6 bits         | 5 bits       | X bits           | Uint32           | 
 +    | 000001         | 01010        | String-UTF-16    | 32 bits unsigned | 
 +    +----------------+--------------+------------------+------------------+ 
 + 
 + 
 +   * Name (String-UTF-16) 
 +   * HomeSessionId (Uint32) 
 + 
 +Retour attendu : ''CONNECTION:VALID_NAME''
 + 
 + 
 +== CONNECTION:VALID_NAME == 
 + 
 +Le serveur répond à une requête ''CONNECTION:ASK_NAME''
 + 
 + 
 +Code actuel : ''CONNECTION:VALID_NAME => 000001.01011'' 
 + 
 +<WRAP center round important 60%> 
 +Attention: dépend de la version que vous avez de msg.xml, susceptible de changer.</WRAP> 
 + 
 + 
 +    +----------------+--------------+-----------------+ 
 +    | CONNECTION     | VALID_NAME   | valide          | 
 +    | 6 bits         | 5 bits       | 8 bits          | 
 +    | 000001         | 01011        | 8 bits unsigned | 
 +    +----------------+--------------+-----------------+ 
 + 
 + 
 +   * valide (Uint8) : 1 => validesinon non valide 
 + 
 + 
 +== CONNECTION:CREATE_CHAR_ERROR == 
 + 
 +== CONNECTION:RECONNECT == 
 + 
 +== CONNECTION:SERVER_RECONNECT_OK == 
 + 
 +== CONNECTION:SHARD_ID == 
 + 
 +== CONNECTION:SERVER_QUIT_OK == 
 + 
 +== CONNECTION:SERVER_QUIT_ABORT == 
 + 
 +== CONNECTION:CLIENT_QUIT_REQUEST == 
 + 
 +== CONNECTION:MAIL_AVAILABLE == 
 + 
 +== CONNECTION:GUILD_MESSAGE_AVAILABLE == 
 + 
 +== CONNECTION:PERMANENT_BAN == 
 + 
 +== CONNECTION:UNBAN == 
 + 
 +== CONNECTION:FAR_TP == 
 + 
 +== CONNECTION:RET_MAINLAND == 
 + 
 +== DB_INIT:PLR == 
 + 
 +== DB_INIT:INV == 
 + 
 +== DB_GROUP:UPDATE_BANK == 
 + 
 +== DB_GROUP:INIT_BANK == 
 + 
 +== DB_GROUP:RESET_BANK == 
 + 
 +== HARVEST:DEPOSIT == 
 + 
 +== HARVEST:CORPSE == 
 + 
 +== HARVEST:INTERRUPT == 
 + 
 +== HARVEST:CLOSE_TEMP_INVENTORY == 
 + 
 +== JOB:SET_JOB_STATUS == 
 + 
 +== JOB:SWAP_JOB_STATUS == 
 + 
 +== CASTING:BEGIN == 
 + 
 +== CASTING:INTERRUPT == 
 + 
 +== FABER:OPEN == 
 + 
 +== FABER:CLOSE == 
 + 
 +== FABER:EXECUTE == 
 + 
 +== FABER:SET_NUM_ITEM == 
 + 
 +== FABER:START_CREATE == 
 + 
 +== FABER:START_REPAIR == 
 + 
 +== FABER:START_REFINE == 
 + 
 +== FABER:SET_MP_QUALITY == 
 + 
 +== FABER:SET_MP_REFINE == 
 + 
 +== FABER:SET_TOOL == 
 + 
 +== FABER:RESET_TOOL == 
 + 
 +== FABER:INTERRUPT == 
 + 
 +== COMBAT:ENGAGE == 
 + 
 +== COMBAT:DISENGAGE == 
 + 
 +== COMBAT:DEFAULT_ATTACK == 
 + 
 +== COMBAT:ENGAGE_FAILED == 
 + 
 +== COMBAT:VALIDATE_MELEE == 
 + 
 +== COMBAT:PARRY == 
 + 
 +== COMBAT:DODGE == 
 + 
 +== COMBAT:PROTECTED_SLOT == 
 + 
 +== COMBAT:FLYING_ChaScore1_DELTA == 
 + 
 +== COMBAT:FLYING_TEXT_ISE == 
 + 
 +== COMBAT:FLYING_TEXT == 
 + 
 +== STRING:TELL == 
 + 
 +== STRING:FAR_TELL == 
 + 
 +== STRING:CHAT == 
 + 
 +== STRING:CHAT_TEAM == 
 + 
 +== STRING:ADD_DYN_STR == 
 + 
 +== STRING:FILTER == 
 + 
 +== STRING:CHAT_MODE == 
 + 
 +== STRING:CHAT2 == 
 + 
 +== STRING:TELL2 == 
 + 
 +== STRING:DYN_STRING == 
 + 
 +== STRING:DYN_STRING_GROUP == 
 + 
 +== STRING:AFK_TXT == 
 + 
 +== STUN:STUN == 
 + 
 +== STUN:WAKE_UP == 
 + 
 +== SENTENCE:EXECUTE == 
 + 
 +== SENTENCE:CANCEL == 
 + 
 +== SENTENCE:CANCEL_CURRENT == 
 + 
 +== SENTENCE:CANCEL_ALL == 
 + 
 +== SENTENCE:CLEAR == 
 + 
 +== SENTENCE:MEMORIZE == 
 + 
 +== SENTENCE:FORGET == 
 + 
 +== SENTENCE:EVALUATE == 
 + 
 +== SENTENCE:ADD_BRICK == 
 + 
 +== SENTENCE:REMOVE_BRICK == 
 + 
 +== SENTENCE:START == 
 + 
 +== SENTENCE:STOP == 
 + 
 +== TEAM:JOIN == 
 + 
 +== TEAM:LEAVE == 
 + 
 +== TEAM:INVITATION == 
 + 
 +== TEAM:JOIN_PROPOSAL == 
 + 
 +== TEAM:JOIN_PROPOSAL_DECLINE == 
 + 
 +== TEAM:KICK == 
 + 
 +== TEAM:SET_SUCCESSOR == 
 + 
 +== TEAM:SHARE_OPEN == 
 + 
 +== TEAM:SHARE_VALID_ITEM == 
 + 
 +== TEAM:SHARE_INVALID_ITEM == 
 + 
 +== TEAM:SHARE_VALID == 
 + 
 +== TEAM:SHARE_INVALID == 
 + 
 +== TEAM:SHARE_CLOSE == 
 + 
 +== TEAM:CONTACT_INIT == 
 + 
 +== TEAM:CONTACT_ADD == 
 + 
 +== TEAM:CONTACT_DEL == 
 + 
 +== TEAM:CONTACT_MOVE == 
 + 
 +== TEAM:CONTACT_CREATE == 
 + 
 +== TEAM:CONTACT_STATUS == 
 + 
 +== TEAM:CONTACT_REMOVE == 
 + 
 +== ITEM:DROP == 
 + 
 +== ITEM:PICK_UP == 
 + 
 +== ITEM:PICK_UP_CLOSE == 
 + 
 +== ITEM:SWAP == 
 + 
 +== ITEM:ACTIVATE_SHEATH == 
 + 
 +== ITEM:HARVEST == 
 + 
 +== ITEM:HARVEST_CLOSE == 
 + 
 +== ITEM:GIVE == 
 + 
 +== ITEM:DESTROY == 
 + 
 +== ITEM:EQUIP == 
 + 
 +== ITEM:UNEQUIP == 
 + 
 +== ITEM:TEMP_TO_BAG == 
 + 
 +== ITEM:ALL_TEMP == 
 + 
 +== ITEM:NO_TEMP == 
 + 
 +== ITEM:ENCHANT == 
 + 
 +== ITEM:OPEN_ROOM_INVENTORY == 
 + 
 +== ITEM:CLOSE_ROOM_INVENTORY == 
 + 
 +== ITEM:USE_ITEM == 
 + 
 +== ITEM:STOP_USE_XP_CAT == 
 + 
 +== TP:RESPAWN == 
 + 
 +== TP:BOT == 
 + 
 +== TP:WANTED == 
 + 
 +== TP:DEST == 
 + 
 +== TP:DEST_WITH_SEASON == 
 + 
 +== TP:ACK == 
 + 
 +== TP:CORRECT == 
 + 
 +== DEATH:RESPAWN_POINT == 
 + 
 +== DEATH:ASK_RESPAWN == 
 + 
 +== DEATH:RESPAWN == 
 + 
 +== ANIMALS:BEAST == 
 + 
 +== ANIMALS:MOUNT_ABORT == 
 + 
 +== EXCHANGE:INVITATION == 
 + 
 +== EXCHANGE:CLOSE_INVITATION == 
 + 
 +== EXCHANGE:PROPOSAL == 
 + 
 +== EXCHANGE:ACCEPT_INVITATION == 
 + 
 +== EXCHANGE:DECLINE_INVITATION == 
 + 
 +== EXCHANGE:VALIDATE == 
 + 
 +== EXCHANGE:INVALIDATE == 
 + 
 +== EXCHANGE:END == 
 + 
 +== EXCHANGE:SEEDS == 
 + 
 +== EXCHANGE:ADD == 
 + 
 +== EXCHANGE:REMOVE == 
 + 
 +== DEBUG:WHERE == 
 + 
 +== DEBUG:WHO == 
 + 
 +== DEBUG:REPLY_WHERE == 
 + 
 +== DEBUG:SERVICES == 
 + 
 +== DEBUG:CMD == 
 + 
 +== DEBUG:PING == 
 + 
 +== DEBUG:COUNTER == 
 + 
 +== COMMAND:EMOTE == 
 + 
 +== COMMAND:CUSTOM_EMOTE == 
 + 
 +== COMMAND:WHERE == 
 + 
 +== COMMAND:ADMIN == 
 + 
 +== COMMAND:ADMIN_OFFLINE == 
 + 
 +== COMMAND:REMOTE_ADMIN == 
 + 
 +== COMMAND:REMOTE_ADMIN_ANSWER == 
 + 
 +== COMMAND:SIT == 
 + 
 +== COMMAND:AFK == 
 + 
 +== COMMAND:RANDOM == 
 + 
 +== COMMAND:GUILDMOTD == 
 + 
 +== MP_EVAL:SET_MP == 
 + 
 +== MP_EVAL:SET_MP_LEVEL == 
 + 
 +== MP_EVAL:SET_MARKET == 
 + 
 +== MP_EVAL:EXECUTE == 
 + 
 +== BOTCHAT:NEXT_PAGE_ITEM == 
 + 
 +== BOTCHAT:NEXT_PAGE_MISSION == 
 + 
 +== BOTCHAT:START_TRADE_ITEM == 
 + 
 +== BOTCHAT:START_TRADE_TELEPORT == 
 + 
 +== BOTCHAT:START_TRADE_FACTION == 
 + 
 +== BOTCHAT:START_TRADE_SKILL == 
 + 
 +== BOTCHAT:START_TRADE_PACT == 
 + 
 +== BOTCHAT:START_TRADE_ACTION == 
 + 
 +== BOTCHAT:BUY == 
 + 
 +== BOTCHAT:SELL == 
 + 
 +== BOTCHAT:DESTROY_ITEM == 
 + 
 +== BOTCHAT:REFRESH_TRADE_LIST ==
  
 == BOTCHAT:SET_FILTERS == == BOTCHAT:SET_FILTERS ==
 +
 Le client informe de certains filtres. Le client informe de certains filtres.
  
Ligne 988: Ligne 1569:
  
 Bref, pour en savoir plus, il va falloir faire des tests ! S'il y a des exemples de filtres, demander à des joueuses de Ryzom (il y en a sur le canal XMPP Khaganat) si ça leur évoque quelque chose. S'il n'y a aucun exemple, donner la piste pour les trouver, et on demandera à quelqu'un ayant accès au code sous NDA de Ryzom pour trouver plus de détail. Bref, pour en savoir plus, il va falloir faire des tests ! S'il y a des exemples de filtres, demander à des joueuses de Ryzom (il y en a sur le canal XMPP Khaganat) si ça leur évoque quelque chose. S'il n'y a aucun exemple, donner la piste pour les trouver, et on demandera à quelqu'un ayant accès au code sous NDA de Ryzom pour trouver plus de détail.
- --- //[[wiki:user:zatalyz|zatalyz]] 2020/08/21 13:46//+ --- //[[user:zatalyz|zatalyz]] 2020/08/21 13:46//
 </WRAP> </WRAP>
  
 <WRAP center round tip 60%> <WRAP center round tip 60%>
 En fait, tout ce qui est 'botchat' c'est les échanges avec les PNJ. Les filtres des botchat sont donc les filtres des fenêtres d'achats/vente avec les PNJ. En fait, tout ce qui est 'botchat' c'est les échanges avec les PNJ. Les filtres des botchat sont donc les filtres des fenêtres d'achats/vente avec les PNJ.
- --- //[[wiki:user:siela1915|siela1915]] 2020/08/22 00:15//+ --- //[[user:siela1915|siela1915]] 2020/08/22 00:15//
 </WRAP> </WRAP>
  
Ligne 1019: Ligne 1600:
    * itemType (Uint8)    * itemType (Uint8)
  
-=== Visual Property ===+ 
 +== BOTCHAT:START_CHOOSE_MISSION == 
 + 
 +== BOTCHAT:START_DYNAMIC_MISSION == 
 + 
 +== BOTCHAT:CONTINUE_MISSION == 
 + 
 +== BOTCHAT:VALIDATE_PLAYER_GIFT == 
 + 
 +== BOTCHAT:PICK_MISSION == 
 + 
 +== BOTCHAT:DM_CHOICE == 
 + 
 +== BOTCHAT:DM_ACCEPT == 
 + 
 +== BOTCHAT:START_NEWS == 
 + 
 +== BOTCHAT:START_CREATE_GUILD == 
 + 
 +== BOTCHAT:END == 
 + 
 +== BOTCHAT:FORCE_END == 
 + 
 +== BOTCHAT:START_CHOOSE_DUTY == 
 + 
 +== BOTCHAT:NEXT_PAGE_DUTY == 
 + 
 +== BOTCHAT:DUTY_APPLY == 
 + 
 +== BOTCHAT:DUTY_CANCEL_APPLY == 
 + 
 +== BOTCHAT:START_TRADE_GUILD_OPTIONS == 
 + 
 +== BOTCHAT:BUY_GUILD_OPTION == 
 + 
 +== BOTCHAT:START_GUILD_RESEARCH == 
 + 
 +== BOTCHAT:DESTROY_BUILDING == 
 + 
 +== BOTCHAT:DYNCHAT_OPEN == 
 + 
 +== BOTCHAT:DYNCHAT_CLOSE == 
 + 
 +== BOTCHAT:DYNCHAT_SEND == 
 + 
 +== JOURNAL:INIT_COMPLETED_MISSIONS == 
 + 
 +== JOURNAL:UPDATE_COMPLETED_MISSIONS == 
 + 
 +== JOURNAL:MISSION_ABANDON == 
 + 
 +== JOURNAL:GROUP_MISSION_ABANDON == 
 + 
 +== JOURNAL:ADD_COMPASS == 
 + 
 +== JOURNAL:ADD_COMPASS_BOT == 
 + 
 +== JOURNAL:REMOVE_COMPASS == 
 + 
 +== JOURNAL:REMOVE_COMPASS_BOT == 
 + 
 +== STRING_MANAGER:SET_LANGUAGE == 
 + 
 +== STRING_MANAGER:PHRASE_SEND == 
 + 
 +Le serveur envoie un message, plus précisément le pointeur sur le message. 
 + 
 +Code actuel : ''STRING_MANAGER:PHRASE_SEND => 011011.001'' 
 + 
 +<WRAP center round important 60%> 
 +Attention : dépend de la version que vous avez de ''msg.xml'', susceptible de changer ! 
 +</WRAP> 
 +    +----------------+--------------+------------------+------------------+ 
 +    | STRING_MANAGER | PHRASE_SEND  | dyn_id           | string_id        | string_id . . . 
 +    | 6 bits         | 3 bits       | uint32           | uint32           | tant que l'on a au moins 32 bits, on lit un autre string_id 
 +    | 011011         | 001          | 32 bits unsigned | 32 bits unsigned | 
 +    +----------------+--------------+------------------+------------------+ 
 + 
 +   * ''dyn_id'' (Uint32) : l'ID du groupe de message 
 +   * ''string_id'' (Uint32) : le pointeur sur le message 
 + 
 + 
 +== STRING_MANAGER:STRING_RQ == 
 + 
 +Le client demande le message complet en fonction du pointeur. 
 + 
 +Code actuel : ''STRING_MANAGER:STRING_RQ => 011011.010''
 + 
 +    +----------------+--------------+------------------+ 
 +    | STRING_MANAGER | STRING_RQ    | string_id        | 
 +    | 6 bits         | 3 bits       | uint32           | 
 +    | 011011         | 010          | 32 bits unsigned | 
 +    +----------------+--------------+------------------+ 
 + 
 +   * ''string_id'' (Uint32) : le pointeur sur le message 
 + 
 +Le serveur va répondre à ce message par ''STRING_MANAGER:STRING_RESP''
 + 
 +== STRING_MANAGER:STRING_RESP == 
 + 
 +Le serveur renvoie le message complet. 
 + 
 +Code actuel : ''STRING_MANAGER:STRING_RESP => 011011.011''
 + 
 +    +----------------+--------------+------------------+--------------+ 
 +    | STRING_MANAGER | STRING_RESP  | string_id        | MessageUtf8 
 +    | 6 bits         | 3 bits       | uint32           | String-UTF-8 | 
 +    | 011011         | 011          | 32 bits unsigned | X bits       | 
 +    +----------------+--------------+------------------+--------------+ 
 + 
 +   * ''string_id'' (Uint32) : le pointeur sur le message. 
 +   * ''MessageUtf8'' (String-UTF-8) : la chaîne de caractère en UTF-8. 
 + 
 +On remarque ici l'utilisation de la chaîne de caractère au format UTF-8 (alors qu’ailleurs nous avons UTF-16). 
 + 
 + 
 +== STRING_MANAGER:RELOAD_CACHE == 
 + 
 +Commande utilisée pour initialiser le tableau de message. 
 + 
 +Ici, on vérifie que notre tableau interne au client a la même date que le tableau du serveur. Sinon, on efface le tableau interne du client, et à chaque nouveau message le client demandera à quoi il correspond. 
 + 
 +Code actuel : ''STRING_MANAGER:RELOAD_CACHE => 011011.100'' 
 + 
 +<WRAP center round important 60%> 
 +Attention : dépend de la version que vous avez de ''msg.xml'', susceptible de changer ! 
 +</WRAP> 
 + 
 + 
 +    +----------------+--------------+------------------+ 
 +    | STRING_MANAGER | RELOAD_CACHE | timestamp        | 
 +    | 6 bits         | 3 bits       | uint32           | 
 +    | 011011         | 100          | 32 bits unsigned | 
 +    +----------------+--------------+------------------+ 
 + 
 +   * ''timestamp (uint32)'' : date du tableau de message 
 + 
 + 
 +== GUILD:CREATE == 
 + 
 +== GUILD:ABORT_CREATION == 
 + 
 +== GUILD:OPEN_GUILD_WINDOW == 
 + 
 +== GUILD:INVITATION == 
 + 
 +== GUILD:ACCEPT_INVITATION == 
 + 
 +== GUILD:REFUSE_INVITATION == 
 + 
 +== GUILD:JOIN_PROPOSAL == 
 + 
 +== GUILD:SET_GRADE == 
 + 
 +== GUILD:SET_LEADER == 
 + 
 +== GUILD:KICK_MEMBER == 
 + 
 +== GUILD:TELEPORT == 
 + 
 +== GUILD:ASCENSOR == 
 + 
 +== GUILD:FIRST_ASCENSOR_PAGE == 
 + 
 +== GUILD:NEXT_ASCENSOR_PAGE == 
 + 
 +== GUILD:LEAVE_ASCENSOR == 
 + 
 +== GUILD:QUIT == 
 + 
 +== GUILD:SET_PLAYER_TITLE == 
 + 
 +== GUILD:UPDATE_PLAYER_TITLE == 
 + 
 +== GUILD:USE_FEMALE_TITLES == 
 + 
 +Le serveur signale que la guilde((Le MMORPG utilise un système de "guilde". Voir l'évolution en "[[fr:gamedesign:khanat:start#communaute|organisation]]" pour Khaganat)) utilise le féminin dans les titres. 
 + 
 +Code actuel : ''GUILD:USE_FEMALE_TITLES => 011100.10010'' 
 + 
 +<WRAP center round important 60%> 
 +Attention : dépend de la version que vous avez de msg.xml, susceptible de changer. 
 +</WRAP> 
 + 
 +    +------------+-------------------+--------------------+ 
 +    | GUILD      | USE_FEMALE_TITLES | UseFemaleTitles    | 
 +    | 6 bits     | 5 bits            | bool               | 
 +    | 011100     | 10010             | 1 bit              | 
 +    +------------+-------------------+--------------------+ 
 + 
 +   * UseFemaleTitles (bool) : 1 = Oui, 0 = Non 
 + 
 +== GUILD:PUT_MONEY == 
 + 
 +== GUILD:TAKE_MONEY == 
 + 
 +== GUILD:OPEN_INVENTORY == 
 + 
 +== GUILD:CLOSE_INVENTORY == 
 + 
 +== OUTPOST:GIVEUP_OUTPOST == 
 + 
 +== OUTPOST:SELECT == 
 + 
 +== OUTPOST:UNSELECT == 
 + 
 +== OUTPOST:DECLARE_WAR_START == 
 + 
 +== OUTPOST:DECLARE_WAR_ACK == 
 + 
 +== OUTPOST:DECLARE_WAR_VALIDATE == 
 + 
 +== OUTPOST:SET_DEF_PERIOD == 
 + 
 +== OUTPOST:SET_SQUAD == 
 + 
 +== OUTPOST:SET_SQUAD_SPAWN == 
 + 
 +== OUTPOST:INSERT_SQUAD == 
 + 
 +== OUTPOST:REMOVE_SQUAD == 
 + 
 +== OUTPOST:SET_SQUAD_CAPITAL == 
 + 
 +== OUTPOST:CHOOSE_SIDE == 
 + 
 +== OUTPOST:SIDE_CHOSEN == 
 + 
 +== OUTPOST:BANISH_PLAYER == 
 + 
 +== OUTPOST:BANISH_GUILD == 
 + 
 +== OUTPOST:BUY_BUILDING == 
 + 
 +== OUTPOST:DESTROY_BUILDING == 
 + 
 +== PHRASE:DELETE == 
 + 
 +== PHRASE:LEARN == 
 + 
 +== PHRASE:MEMORIZE == 
 + 
 +== PHRASE:FORGET == 
 + 
 +== PHRASE:EXECUTE == 
 + 
 +== PHRASE:EXECUTE_CYCLIC == 
 + 
 +== PHRASE:EXECUTE_FABER == 
 + 
 +== PHRASE:DOWNLOAD == 
 + 
 +== PHRASE:BUY == 
 + 
 +== PHRASE:CONFIRM_BUY == 
 + 
 +== PHRASE:BUY_SHEET == 
 + 
 +== PHRASE:CANCEL_LINK == 
 + 
 +== PHRASE:CANCEL_TOP == 
 + 
 +== PHRASE:CANCEL_ALL == 
 + 
 +== PHRASE:CRISTALIZE == 
 + 
 +== PHRASE:EXEC_CYCLIC_ACK == 
 + 
 +== PHRASE:EXEC_NEXT_ACK == 
 + 
 +== ITEM_INFO:GET == 
 + 
 +== ITEM_INFO:SET == 
 + 
 +== ITEM_INFO:REFRESH_VERSION == 
 + 
 +== MISSION_PREREQ:GET == 
 + 
 +== MISSION_PREREQ:SET == 
 + 
 +== MISSION:ENTER_CRITICAL == 
 + 
 +== MISSION:ASK_ENTER_CRITICAL == 
 + 
 +== MISSION:CLOSE_ENTER_CRITICAL == 
 + 
 +== MISSION:WAKE == 
 + 
 +== MISSION:GROUP_WAKE == 
 + 
 +== DUEL:ASK == 
 + 
 +== DUEL:ACCEPT == 
 + 
 +== DUEL:REFUSE == 
 + 
 +== DUEL:ABANDON == 
 + 
 +== DUEL:INVITATION == 
 + 
 +== DUEL:CANCEL_INVITATION == 
 + 
 +== PVP_CHALLENGE:ASK == 
 + 
 +== PVP_CHALLENGE:ACCEPT == 
 + 
 +== PVP_CHALLENGE:REFUSE == 
 + 
 +== PVP_CHALLENGE:ABANDON == 
 + 
 +== PVP_CHALLENGE:INVITATION == 
 + 
 +== PVP_CHALLENGE:CANCEL_INVITATION == 
 + 
 +== PVP:PVP_TAG == 
 + 
 +== PVP:SET_NEUTRAL_ALLEGIANCE == 
 + 
 +== PVP:SET_NEUTRAL_ALLEGIANCE_GUILD == 
 + 
 +== PVP_FACTION:PUSH_FACTION_WAR == 
 + 
 +== PVP_FACTION:POP_FACTION_WAR == 
 + 
 +== PVP_FACTION:FACTION_WARS == 
 + 
 +== ENCYCLOPEDIA:UPDATE == 
 + 
 +== ENCYCLOPEDIA:INIT == 
 + 
 +== USER:BARS == 
 + 
 +== USER:POPUP == 
 + 
 +== EVENT:SET_ITEM_CUSTOM_TEXT == 
 + 
 +== EVENT:DUMMY == 
 + 
 +== TOTEM:BUILD == 
 + 
 +== TOTEM:DUMMY == 
 + 
 +== MODULE_GATEWAY:FEOPEN == 
 + 
 +== MODULE_GATEWAY:GATEWAY_MSG == 
 + 
 +== MODULE_GATEWAY:FECLOSE == 
 + 
 +== SEASON:SET == 
 + 
 +== SEASON:DUMMY == 
 + 
 +== DM_GIFT:BEGIN == 
 + 
 +== DM_GIFT:VALIDATE == 
 + 
 +== RING_MISSION:MISSION_RING_SELECT == 
 + 
 +== RING_MISSION:DSS_DOWN == 
 + 
 +== NPC_ICON:GET_DESC == 
 + 
 +== NPC_ICON:SET_DESC == 
 + 
 +== NPC_ICON:SVR_EVENT_MIS_AVL == 
 + 
 +== NPC_ICON:SET_TIMER == 
 + 
 + 
 + 
 +==== Visual Property ====
  
 Et oui, nous avons encore une autre structure pour envoyer des informations du serveur vers le client. Et oui, nous avons encore une autre structure pour envoyer des informations du serveur vers le client.
Ligne 1025: Ligne 1976:
 Ici le codage/cryptage est différent, on utilise un arbre (avec des feuilles) pour savoir quelles sont les données à décrypter. Ici le codage/cryptage est différent, on utilise un arbre (avec des feuilles) pour savoir quelles sont les données à décrypter.
  
-==== Paquet envoyé par le client ====+Pourquoi cette structure?
  
-=== Corps du message ===+  * Peut-etre pour réduire la taille des info, mais on perd la modularité de msg.xml
  
-    +-------------------+------------+--- +  * l'autre hypothèse est que ces informations sont spécifiques pour les effets visuels (et qu'ils sont suceptibles d'etre tronqué, mais aussi de ne pas bloquer le jeux pour ces effets, car on ne gère pas le renvoie de ces données, enfin je crois)
-    | CurrentSendNumber | SystemMode | . . . +
-    |    32 bits        |  1 bit     | +
-    +-------------------+------------+--- +
-                           1 -> system mode +
-                           0 -> normal mode+
  
 +Visiblement, le serveur gère les mêmes données est il envoie les mises à jour pour certain d'entre eux.
  
 +Le début de la structure:
  
-  * CurrentSendNumber : un compteur qui s'incrémente tout le temps (permet d'ignorer les messages passés). <wrap hi>Attention: quand le compteur aura atteint le maximum, le client va refuser tous les messages.</wrap> +    +----------+-----------------+------------------+----------------+------------------+ 
-  * SystemMode : Informe que le type de message est dit "système" ou "normal".+    | Slot     | associationBits | timestampIsThere | timestampDelta | VisualProperties | 
 +    | 8 Bits   | 2 bit           | 1 bit            | 4 bit          | X bits           | 
 +    | unsigned |                                  | (optionnel                    | 
 +    +----------+-----------------+------------------+----------------+------------------+ 
 +    
  
 +  * slot : position/slot des données
 +  * associationBits : un indicateur (sorte de clef de hachage) pour savoir si on parle de la même donnée, sinon l'ancienne donnée sera effacé.
 +  * timestampIsThere : active le delta sur le timestamp (0: non, 1:oui)
 +  * timestampDelta : permet d'ajouter un delta au timestamp (optionnel dépend de timestampIsThere)
 +  * VisualProperties : ici nous avons une nouvelle structure qui fonctionne par branche (et feuille pour les terminaison)
 +    
 +=== VisualProperties ===
  
-=== Message système ===+Il s'agit d'une liste sans fin de VisualProperty
  
 +  +----------------+----------------+
 +  | VisualProperty | VisualProperty | . . .
 +  +----------------+----------------+
  
-    +-------------------+------------+---------+--- +=== VisualProperty ===
-    | CurrentSendNumber | SystemMode | Message | . . . +
-    |    32 bits        |  1 bit     | 8 Bits  | +
-    +-------------------+------------+---------+--- +
-    |  xxxxxxxxxxxxxxxx |          |+
  
-Suivant la valeur du message, nous avons des paramètres spécifiques.+Il s'agit d'un arbre qui se sépare à chaque fois en deux branch VPA et VPB.
  
-Notez qu'ici nous utilisons 8 bits, on aurait pu réduire la taille afin d'être en adéquation avec les messages envoyés.+Pour chacune des branches (on commence par VPA, puis VPB), on lit un bit (0: pas de donnée, 1: des données), si un branch contient une autre branche, on refait de comme précédement (lecture VPA puis VPB). 
 +puis on continue jusqu'à atteindre la feille, là suivant le type de propriété on va lire un certain nombre debit.
  
-À savoir qu'il y a 5 types de messages provenant du client & 5 types de messages provenant du serveur, soit une taille de 3 bits.+{{:fr:visualproperty.jpg?400|Arbre des propriétés}}
  
-== Message 0 : SYSTEM_LOGIN_CODE == +Dans les faits, ils utilisent ACTION_SINT64 pour toutes les valeurs, mais avec une taille différents pour chaque éléments (et cerise sur le gâteau, PROPERTY_ORIENTATION n'est pas un entier mais un flotant)
-Message émis par le client.+
  
-    +-------------------+------------+---------+-----------+----------+----------+-------- / ---------+ +=== Les différents Property ===
-    | CurrentSendNumber | SystemMode | Message | User Addr | User Key | User ID  | Langue             | +
-    |    32 bits        |  1 bit     | 8 Bits  | 32 bits   | 32 bits  | 32 bits  | String    (x bits) | +
-    |                              |         | unsigned  | unsigned | unsigned |                    | +
-    +-------------------+------------+---------+-----------+----------+----------+-------- / ---------+ +
-    |  xxxxxxxxxxxxxxxx |          |    0    |       xxx |      xxx |      xxx |                xxx |+
  
 +== POSITION_CODE ==
  
 +    +----------+----------+----------+
 +    | px       | py       | pz       |
 +    | 16 Bits  | 16 Bits  | 16 Bits  |
 +    | unsigned | unsigned | unsigned |
 +    +----------+----------+----------+
  
-== Message 2 : SYSTEM_ACK_SYNC_CODE == 
-Message émis par le client. 
-Message utilisé pour acquitter d'une demande de synchronisation. 
  
-    +-------------------+------------+---------+-----------+----------+-----------------+----------+ +  * px : position x 
-    | CurrentSendNumber | SystemMode | Message | frontack  | backack  | longackbitfield | syncCode | +  * py : position y 
-    |    32 bits        |  1 bit     | 8 Bits  | 32 bits   | 32 bits  | 1024 bits       | 32 bits  | +  * pz : position z (isRelative: 0x1, Interior: 0x2)
-                                 |         | unsigned  | unsigned | unsigned        | unsigned | +
-    +-------------------+------------+---------+-----------+----------+-----------------+----------+ +
-    |  xxxxxxxxxxxxxxxx |          |    2    |       xxx |      xxx |             xxx |      xxx |+
  
-  * ''frontack'' : dernier message reçu (''last_received_number'') +    +-------------------------------+ 
-  * ''backack''  : ''last_ack_in_long_ack'' +    | pz                            | 
-  * ''longackbitfield'' : suite de bit qui indique les messages normaux reçus (permettra de faire une synchronisation avec le serveur) +    | 14 bit                        | 
-  * ''syncCode'' : ''_server_sync''+    | | | | | | | | | | | | | | | | | | | 
 +    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
 +                                     + Interior 
 +                                       + IsRelative
  
 +== PROPERTY_ORIENTATION ==
  
-== Message 4 : SYSTEM_ACK_PROBE_CODE == +Indique la rotation (par rapport à quoi ?, le nord ?)
-Message émis par le client.+
  
-Acquitte des messages PROBE envoyés.+    +-------------+ 
 +    | Orientation | 
 +    | 32 Bits     | 
 +    | float       | 
 +    +-------------+
  
-    +-------------------+------------+---------+-------------+---------+---------+-- / --+---------+ +== PROPERTY_BEHAVIOUR ==
-    | CurrentSendNumber | SystemMode | Message | Taille : X  | Probe 1 | Probe 2 |       | Probe X | +
-    |    32 bits        |  1 bit     | 8 Bits  | 32 bits     | 32 bits | 32 bits |       | 32 bits | +
-    |                              |         | signed      | signed  | signed  |       | signed +
-    +-------------------+------------+---------+-------------+---------+---------+-- / --+---------+ +
-    |  xxxxxxxxxxxxxxxx |          |    4    |+
  
 +    +-------------+
 +    | Behaviour   |
 +    | 48 Bits     |
 +    | Unsigned    |
 +    +-------------+
  
-== Message 5 : SYSTEM_DISCONNECTION_CODE == +== PROPERTY_OWNER_PEOPLE ==
-Message émis par le client.+
  
-    +-------------------+------------+---------+ +    +--------------+ 
-    | CurrentSendNumber | SystemMode | Message +    | Owner People 
-    |    32 bits        |  1 bit     | 8 Bits  +    | Bits       
-    |                   |            |         +    | Unsigned     
-    +-------------------+------------+---------+ +    +--------------+
-    |  xxxxxxxxxxxxxxxx |          |    5    |+
  
 +== PROPERTY_NAME_STRING_ID ==
  
-== Message 8 : SYSTEM_QUIT_CODE == +    +----------------+ 
-Message émis par le client.+    | Name String Id | 
 +    | 32 Bits        | 
 +    | Unsigned       | 
 +    +----------------+
  
-    +-------------------+------------+---------+---------+ +== PROPERTY_CONTEXTUAL ==
-    | CurrentSendNumber | SystemMode | Message | Quit Id | +
-    |    32 bits        |  1 bit     | 8 Bits  | 32 bits | +
-    |                              |         | signed +
-    +-------------------+------------+---------+---------+ +
-    |  xxxxxxxxxxxxxxxx |          |    8    |+
  
 +    +------------+
 +    | Contextual |
 +    | 16 Bits    |
 +    | Unsigned   |
 +    +------------+
  
-  +== PROPERTY_TARGET_LIST ==
-=== Message normal ===+
  
 +    +-------------+
 +    | Target List |
 +    | 32 Bits     |
 +    | Unsigned    |
 +    +-------------+
  
-    +-------------------+------------+---- +== PROPERTY_TARGET_ID ==
-    | CurrentSendNumber | SystemMode | . . . +
-    |    32 bits        |  1 bit     |  +
-    +-------------------+------------+---- +
-    |  xxxxxxxxxxxxxxxx |          |+
  
-À remplir.+    +-----------+ 
 +    | Target ID | 
 +    | 8 Bits    | 
 +    | Unsigned 
 +    +-----------+ 
 + 
 +== PROPERTY_MODE == 
 + 
 +    +-----------+ 
 +    | Mode      | 
 +    | 44 Bits   | 
 +    | Unsigned 
 +    +-----------+ 
 + 
 +== PROPERTY_VPA == 
 + 
 +    +-----------+ 
 +    | VPA       | 
 +    | 64 Bits   | 
 +    | Unsigned 
 +    +-----------+ 
 + 
 +== PROPERTY_BARS == 
 + 
 +    +-----------+ 
 +    | BARS      | 
 +    | 32 Bits   | 
 +    | Unsigned 
 +    +-----------+ 
 + 
 +<WRAP center round help 60%> 
 +Avec le petit commentaire du code source :  please do not lower it (or tell Olivier: used for forage sources) 
 +</WRAP> 
 + 
 +== PROPERTY_VISUAL_FX == 
 + 
 +    +-----------+ 
 +    | VISUAL FX | 
 +    | 11 Bits   | 
 +    | Unsigned 
 +    +-----------+ 
 + 
 +<WRAP center round help 60%> 
 +Avec le petit commentaire du code source :  please do not lower it (or tell Olivier: used for forage sources) 
 +</WRAP> 
 + 
 +== PROPERTY_VPB == 
 + 
 +    +-----------+ 
 +    | VPB       | 
 +    | 47 Bits   | 
 +    | Unsigned 
 +    +-----------+ 
 + 
 +== PROPERTY_VPC == 
 + 
 +    +-----------+ 
 +    | VPC       | 
 +    | 58 Bits   | 
 +    | Unsigned 
 +    +-----------+ 
 + 
 +== PROPERTY_EVENT_FACTION_ID == 
 + 
 +    +------------------+ 
 +    | Event Faction ID | 
 +    | 32 Bits          | 
 +    | Unsigned         | 
 +    +------------------+ 
 + 
 +== PROPERTY_PVP_MODE == 
 + 
 +    +----------+ 
 +    | PvP Mode | 
 +    | 10 Bits  | 
 +    | Unsigned | 
 +    +----------+ 
 + 
 +== PROPERTY_PVP_CLAN == 
 + 
 +    +----------+ 
 +    | PvP Clan | 
 +    | 32 Bits  | 
 +    | Unsigned | 
 +    +----------+ 
 + 
 +== PROPERTY_ENTITY_MOUNTED_ID == 
 + 
 +    +-------------------+ 
 +    | Entity Mounted ID | 
 +    | 8 Bits            | 
 +    | Unsigned          | 
 +    +-------------------+ 
 + 
 +== PROPERTY_RIDER_ENTITY_ID == 
 + 
 +    +-----------------+ 
 +    | Rider Entity ID | 
 +    | 8 Bits          | 
 +    | Unsigned        | 
 +    +-----------------+ 
 + 
 +== PROPERTY_OUTPOST_INFOS == 
 + 
 +    +---------------+ 
 +    | Outpost Infos | 
 +    | 16 Bits       | 
 +    | Unsigned      | 
 +    +---------------+ 
 + 
 +== PROPERTY_GUILD_SYMBOL == 
 + 
 +    +--------------+ 
 +    | Guild Symbol | 
 +    | 60 Bits      | 
 +    | Unsigned     | 
 +    +--------------+ 
 + 
 +== PROPERTY_GUILD_NAME_ID == 
 + 
 +    +---------------+ 
 +    | Guild Name ID | 
 +    | 32 Bits       | 
 +    | Unsigned      | 
 +    +---------------+ 
 + 
 +=== Exemple ===
  
 +A faire ...
  
 ===== Annexe : Format des messages ===== ===== Annexe : Format des messages =====
Ligne 1138: Ligne 2227:
 ==== bool : 1 bit ==== ==== bool : 1 bit ====
  
-Juste un bit, vrai ou faux (true/false).+Juste un bit, vrai ou faux (true [1]/false [0]).
  
     +-------+     +-------+
Ligne 1236: Ligne 2325:
  
  
 +
 +===== Annexe : Exemple de communication =====
 +
 +==== Exemple d'échange de message entre le serveur et client après l'authentification ====
 +
 +    +-------------------+--------------------------------+--------------
 +    | Source -> Dest.   | Message                        | Description
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | CONNECTION/USER_CHARS          | Liste tous les personnages du joueur + quelque info sur le système (liste des shard, ...)
 +    +-------------------+--------------------------------+--------------
 +    | Client -> Serveur | CONNECTION/ASK_NAME            | Demande si on nom est disponible
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | CONNECTION/VALID_NAME          | Réponse sur la validité du nom
 +    +-------------------+--------------------------------+--------------
 +    | Client -> Serveur | CONNECTION/CREATE_CHAR         | Création d'un personnage
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | CONNECTION/USER_CHARS          | Liste tous les personnages du joueur + quelque info sur le système (liste des shard, ...)
 +    +-------------------+--------------------------------+--------------
 +    | Client -> Serveur | CONNECTION/SELECT_CHAR         | Selection le personnage
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | CONNECTION/USER_CHAR           | Confirmation du personnage + renvoie des infos
 +    +-------------------+--------------------------------+--------------
 +    | Client -> Serveur | CONNECTION/READY               | Joueur confirme qu'il est pret
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | CONNECTION/SHARD_ID            | Information sur le shard connecté
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | TEAM/CONTACT_INIT              | Liste les contacts du joueur
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | PHRASE/DOWNLOAD                | 
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | GUILD/UPDATE_PLAYER_TITLE      | Mise a jour pour le joueur
 +    +-------------------+--------------------------------+--------------
 +    | Client -> Serveur | BOTCHAT/SET_FILTERS            | 
 +    +-------------------+--------------------------------+--------------
 +    | Client -> Serveur | POSITION (X, Y, Z, Heading)    | Definition de la position actuelle du personnage
 +    +-------------------+--------------------------------+--------------
 +    | Client -> Serveur | DEBUG/PING                     | Debug message with time
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | DEATH/RESPAWN_POINT            | Position pour renaitre (apres une mort)
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | STRING/DYN_STRING              | Envoie une message (ici on envoie uniquement un ID, si besoin on interroge le serveur pour avoir le détail du message)
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | PHRASE/DOWNLOAD                | message
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | ENCYCLOPEDIA/INIT              | 
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | DB_INIT/INV                    | Initialise l'inventaire
 +    +-------------------+--------------------------------+--------------
 +    | Client -> Serveur | NPC_ICON/GET_DESC              |  
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | STRING_MANAGER/PHRASE_SEND     | Envoie une série de message (toujours via l'ID)
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | USER/BARS                      | 
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | NPC_ICON/SET_DESC              | 
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | VisualProperty/Slot            | Description de l'environnement (autres joueurs/personnages
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | DB_INIT/PLR/DatabaseXML        | Initialise la base de donnée - ici on trouve toutes les descriptions de l'environnement (personnage, groupe, pack animal et peut-être plus)
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | DB_GROUP/INIT_BANK             
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | DB_UPD_PLR                     
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | PVP_EFFECTS/PVP_FACTION_POINTS | 
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | DB_UPD_PLR/DatabaseXML         | Mise à jour la base de donnée - ici on trouve toutes les descriptions de l'environnement (personnage, groupe, pack animal et peut-être plus)
 +    +-------------------+--------------------------------+--------------
 + 
 + 
 +==== Exemple d'échange de message texte envoyé par le serveur ====
 +
 +Dans les faits, le serveur envoie des identifiant pour le message, si le client ne connais pas l'identifiant, il demande au serveur qui lui répond.
 + 
 +    +-------------------+--------------------------------+--------------
 +    | Source -> Dest.   | Message                        | Description
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | STRING_MANAGER/PHRASE_SEND     | Envoie d'une phase à afficher (pouvant contenir des paramètres à remplacer) - envoie une liste d'ID (chaque ID correspond à un identifiant présent dans un tableau)
 +    +-------------------+--------------------------------+--------------
 +    | Client -> Serveur | STRING_MANAGER/STRING_RQ       | Interrogation sur le contenu d'un identifiant 
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | STRING_MANAGER/STRING_RESP     | Retour du serveur pour une chaine de texte demande
 +    +-------------------+--------------------------------+--------------
 + 
 +Ex.:
 +  Le serveur demande d'afficher le message 2264924217 (qui est la somme des messages 7705 avec comme paramètre 7849 + 7859)
 +  7705 : &ZON&Vous êtes dans la région %s sur le continent %s.
 +  7849 : Dispensaire
 +  7859 : Terres Contrôlées
 +  
 +  Cela donne le message : &ZON&Vous êtes dans la région Dispensaire sur le continent Terres Contrôlées.
 +
 +
 +
 +===== Annexe : Exemple de communication =====
 +
 +==== Exemple d'échange de message entre le serveur et client après l'authentification ====
 +
 +    +-------------------+--------------------------------+--------------
 +    | Source -> Dest.   | Type de message                | Description
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | CONNECTION/USER_CHARS          | Liste tous les personnages du joueur + quelque info sur le système (liste des shard, ...)
 +    +-------------------+--------------------------------+--------------
 +    | Client -> Serveur | CONNECTION/ASK_NAME            | Demande si on nom est disponible
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | CONNECTION/VALID_NAME          | Réponse sur la validité du nom
 +    +-------------------+--------------------------------+--------------
 +    | Client -> Serveur | CONNECTION/CREATE_CHAR         | Création d'un personnage
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | CONNECTION/USER_CHARS          | Liste tous les personnages du joueur + quelque info sur le système (liste des shard, ...)
 +    +-------------------+--------------------------------+--------------
 +    | Client -> Serveur | CONNECTION/SELECT_CHAR         | Selection le personnage
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | CONNECTION/USER_CHAR           | Confirmation du personnage + renvoie des infos
 +    +-------------------+--------------------------------+--------------
 +    | Client -> Serveur | CONNECTION/READY               | Joueur confirme qu'il est pret
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | CONNECTION/SHARD_ID            | Information sur le shard connecté
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | TEAM/CONTACT_INIT              | Liste les contacts du joueur
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | PHRASE/DOWNLOAD                | 
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | GUILD/UPDATE_PLAYER_TITLE      | Mise a jour pour le joueur
 +    +-------------------+--------------------------------+--------------
 +    | Client -> Serveur | BOTCHAT/SET_FILTERS            | 
 +    +-------------------+--------------------------------+--------------
 +    | Client -> Serveur | POSITION (X, Y, Z, Heading)    | Definition de la position actuelle du personnage
 +    +-------------------+--------------------------------+--------------
 +    | Client -> Serveur | DEBUG/PING                     | Debug message with time
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | DEATH/RESPAWN_POINT            | Position pour renaitre (apres une mort)
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | STRING/DYN_STRING              | Envoie une message (ici on envoie uniquement un ID, si besoin on interroge le serveur pour avoir le détail du message)
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | PHRASE/DOWNLOAD                | message
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | ENCYCLOPEDIA/INIT              | 
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | DB_INIT/INV                    | Initialise l'inventaire
 +    +-------------------+--------------------------------+--------------
 +    | Client -> Serveur | NPC_ICON/GET_DESC              |  
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | STRING_MANAGER/PHRASE_SEND     | Envoie une série de message (toujours via l'ID)
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | USER/BARS                      | 
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | NPC_ICON/SET_DESC              | 
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | VisualProperty/Slot            | Description de l'environnement (autres joueurs/personnages
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | DB_INIT/PLR/DatabaseXML        | Initialise la base de donnée - ici on trouve toutes les descriptions de l'environnement (personnage, groupe, pack animal et peut-être plus)
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | DB_GROUP/INIT_BANK             
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | DB_UPD_PLR                     
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | PVP_EFFECTS/PVP_FACTION_POINTS | 
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | DB_UPD_PLR/DatabaseXML         | Mise à jour la base de donnée - ici on trouve toutes les descriptions de l'environnement (personnage, groupe, pack animal et peut-être plus)
 +    +-------------------+--------------------------------+--------------
 +
 +==== Exemple d'échange de message texte envoyé par le serveur ====
 +
 +Dans les faits, le serveur envoie des identifiant pour le message, si le client ne connais pas l'identifiant, il demande au serveur qui lui répond.
 +
 +    +-------------------+--------------------------------+--------------
 +    | Source -> Dest.   | Type de message                | Description
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | STRING_MANAGER/PHRASE_SEND     | Envoie d'une phase à afficher (pouvant contenir des paramètres à remplacer) - envoie une liste d'ID (chaque ID correspond à un identifiant présent dans un tableau)
 +    +-------------------+--------------------------------+--------------
 +    | Client -> Serveur | STRING_MANAGER/STRING_RQ       | Interrogation sur le contenu d'un identifiant 
 +    +-------------------+--------------------------------+--------------
 +    | Serveur -> Client | STRING_MANAGER/STRING_RESP     | Retour du serveur pour une chaine de texte demande
 +    +-------------------+--------------------------------+--------------
 + 
 +Ex.:
 +  Le serveur demande d'afficher le message 2264924217 (qui est la somme des messages 7705 avec comme paramètres 7849 + 7859)
 +  7705 : &ZON&Vous êtes dans la région %s sur le continent %s.
 +  7849 : Dispensaire
 +  7859 : Terres Contrôlées
 +  
 +  Cela donne le message : &ZON&Vous êtes dans la région Dispensaire sur le continent Terres Contrôlées.
 +
 +
 +===== Annexe : Analyse des structures =====
 +
 +==== Structure du personnage ====
 +
 +La structure du personnage est différente entre la création et l'envoie les caractèristiques vers les autres joueurs.
 +Il en résulte une contrainte sur les paramètres pour faire coincidé les deux structures.
 +Dans un premier cas, on retrouve toutes les propriétés sur un mutltiple de 8 bits, and le deuxième cas, on contracte les données en trois entier de 64 bits. (bref moins de place donc certain paramètres on pas la possibilité d'utiliser toutes les valeurs pouvant etre mise dans le premier cas.
 +De plus quand on recharge les personnages, on retrouve la réduction appliqué.
 +  *   * Liste à puce
 +=== Structure création du personnage ===
 +
 +== Structure création du personnage ==
 +
 +Type de message : CONNECTION/CREATE_CHAR
 +
 +  * (Uint8) Slot
 +  * (Uint32) SheetId
 +  * (Uint32) CSessionId
 +  * (Uint32) name:size
 +  * (UString) name:ustring (si la size > 0, attention, il y a des fortes contraintes uniquement [A-Za-z]+)
 +  * (Uint8) People
 +  * (Uint8) Sex
 +  * (Uint8) NbPointFighter
 +  * (Uint8) NbPointCaster
 +  * (Uint8) NbPointCrafter
 +  * (Uint8) NbPointHarvester
 +  * (Sint32) StartPoint
 +  * (Sint8) HairType
 +  * (Sint8) HairColor
 +  * (Sint8) GabaritHeight
 +  * (Sint8) GabaritTorsoWidth
 +  * (Sint8) GabaritArmsWidth
 +  * (Sint8) GabaritLegsWidth
 +  * (Sint8) GabaritBreastSize
 +  * (Sint8) MorphTarget1
 +  * (Sint8) MorphTarget2
 +  * (Sint8) MorphTarget3
 +  * (Sint8) MorphTarget4
 +  * (Sint8) MorphTarget5
 +  * (Sint8) MorphTarget6
 +  * (Sint8) MorphTarget7
 +  * (Sint8) MorphTarget8
 +  * (Sint8) EyesColor
 +  * (Sint8) Tattoo
 +  * (Sint8) JacketColor
 +  * (Sint8) TrousersColor
 +  * (Sint8) HatColor
 +  * (Sint8) ArmsColor
 +  * (Sint8) HandsColor
 +  * (Sint8) FeetColor
 +
 +Source : 
 +   khanat-opennel-code/code/ryzom/common/src/game_share/msg_client_server.h:114 class CCreateCharMsg
 +   khanat-opennel-code/code/ryzom/common/src/game_share/character_summary.h:35  struct CCharacterSummary
 +   khanat-opennel-code/code/ryzom/server/src/pd_support_service/stat_character.h:844 CStatsScanCharacter()
 +
 +
 +=== Structure reception pour les autres joueurs ===
 +
 +Ils existent plusieurs messages qui receptionne les caractèristiques.
 +
 +  * Les messages du type CONNECTION/USER_CHARS (qui les tous les personnages du joueur)
 +    * Utilise la structure VPA, VPB & VPC
 +  * Les messages du type VisualProperty (on réception les caractèristiques des différentes entités [personnages d'autres joueurs, annimaux, ...])
 +    * Utilise la structure VPA & VPC (pas la VPB - étrange)
 +
 +== Structure VisualPropA ==
 +
 +VPA: VisualPropA est de type Uint64 (unsigned int 64 bits).
 +
 +[Source: khanat-opennel-code/code/ryzom/common/src/game_share/player_visual_properties.h:32 struct SPropVisualA]
 +
 +  * Sex : 1 bit/booléan (max 1)
 +  * JacketModel : 8 bits (max: 255)
 +  * JacketColor : 3 bits (max: 7)
 +  * TrouserModel : 8 bits (max 255)
 +  * TrouserColor : 3 bits (max: 7)
 +  * WeaponRightHand : 10 bits (max: 1023)
 +  * WeaponLeftHand : 8 bits (max: 255)
 +  * ArmModel : 8 bits (max: 255)
 +  * ArmColor : 3 bits (max: 7)
 +  * HatModel : 9 bits (max: 511)
 +  * HatColor : 3 bits (max: 7)
 +
 +Remarque concernant le sexe : 
 +On peut noter qu'il n'y a que 2 possibilités pour le sexe, mâle ou femelle.
 +(on peut dire adieu aux autres formes de reproduction (asexuée, clonnage, changement de sexe suivant l'alimentation/age/température/...)
 +
 +== Structure VisualPropB ==
 +
 +VPB: VisualPropB est de type Uint64 (unsigned int 64 bits).
 +
 +[Source: khanat-opennel-code/code/ryzom/common/src/game_share/player_visual_properties.h:105 struct SPropVisualB]
 +
 +  * Name : 16 bits (max: 65535) -> ID qui permettrant de retrouver dans la liste des mots stockés
 +  * HandsModel : 9 bits (max: 511)
 +  * HandsColor : 3 bits (max: 7)
 +  * FeetModel : 9 bits (max: 511)
 +  * FeetColor : 3 bits (max: 7)
 +  * RTrail : 4 bits (max: 15)
 +  * LTrail : 3 bits (max: 7)
 +  * Reste : 17 bits non utilisée
 +
 +== Structure VisualPropC ==
 +
 +VPC: VisualPropC est de type Uint64 (unsigned int 64 bits).
 +
 +[Source: khanat-opennel-code/code/ryzom/common/src/game_share/player_visual_properties.h:163 struct SPropVisualC]
 +
 +  * MorphTarget1 : 3 bits (max: 7)
 +  * MorphTarget2 : 3 bits (max: 7)
 +  * MorphTarget3 : 3 bits (max: 7)
 +  * MorphTarget4 : 3 bits (max: 7)
 +  * MorphTarget5 : 3 bits (max: 7)
 +  * MorphTarget6 : 3 bits (max: 7)
 +  * MorphTarget7 : 3 bits (max: 7)
 +  * MorphTarget8 : 3 bits (max: 7)
 +  * EyesColor : 3 bits (max: 7)
 +  * Tattoo : 7 bits (max: 127)
 +  * CharacterHeight : 4 bits (max: 15)
 +  * TorsoWidth : 4 bits (max: 15)
 +  * ArmsWidth : 4 bits (max: 15)
 +  * LegsWidth : 4 bits (max: 15)
 +  * BreastSize : 4 bits (max: 15)
 +  * Reste : 10 bits non utilisée
  
 {{tag>Théorie MMORPG Client Serveur Réseau ryzom_core}} {{tag>Théorie MMORPG Client Serveur Réseau ryzom_core}}
CC Attribution-Share Alike 4.0 International Driven by DokuWiki
fr/toutcommenceparlereseau.1598098922.txt.gz · Dernière modification : 2021/12/03 19:18 (modification externe)

Licences Mentions légales Accueil du site Contact