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/11/28 21:28] – [Factory] aleajactaestfr:toutcommenceparlereseau [2021/12/03 19:19] (Version actuelle) – modification externe 127.0.0.1
Ligne 55: Ligne 55:
  --- //[[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 771: Ligne 783:
  
 Maintenant, vous savez comment décoder l'entête des messages ''impulse''. Attention, le reste du codage dans ''msg.xml'' ne sert pas pour le client (mais certainement pour la communication entre les différents services du serveur). Maintenant, vous savez comment décoder l'entête des messages ''impulse''. Attention, le reste du codage dans ''msg.xml'' ne sert pas pour le client (mais certainement pour la communication entre les différents services du serveur).
 +
 +
 +
 +== Lecture du fichier database.xml ==
 +
 +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 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>
 +
 +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 le premier niveau qui nous interrese est database_description, puis ensuite on ne garde que les branches ayant le parametre bank égale "PLR".
 +Pour la partie branche, cet é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.
 +
 +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)
 +
 +Ensuite, nous avons la possibilité d'avoir le mot clef 'atom', s'il est à 1, cela 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)
 +
 +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:
 +
 +<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>
 +
 +       <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>
 +
 +<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>
 +
 +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
 +
 +  * 01 : <USER> le 1er nieveau est sur 2 bit (on a trois elements 0,1 & 2) => 2 bit pour sélectionner celui que l'on veut.
 +  * 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
 +  * 11111111111111111111111111111111 : <VALUE> 4294967295
 +  * 01111111111111111111111111111111 : <VALUE> 2147483647
 +  * Résumé:
 +    * USER.SKILL_POINTS_2 = 4294967295
 +    * USER.SKILL_POINTS_4 = 2147483647
 +
 +3ème exemple :
 +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  
 +
 + 
 +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é) 
 +
 +
 +
  
  
Ligne 2135: 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.1606595327.txt.gz · Dernière modification : 2021/12/03 19:18 (modification externe)

Licences Mentions légales Accueil du site Contact