Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| fr:toutcommenceparlereseau [2020/08/21 22:16] – Explication des filtres botchat Sit Melai | fr:toutcommenceparlereseau [2021/12/03 18:19] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 20: | Ligne 20: | ||
| * Étape 1 : connexion & authentification | * Étape 1 : connexion & authentification | ||
| - | * Étape 2 : communication continue (ici commence réellement le jeux) | + | * Étape 2 : communication continue (ici commence réellement le jeu) |
| Pourquoi deux étapes? | Pourquoi deux étapes? | ||
| Ligne 53: | Ligne 53: | ||
| Ce qui suit n'est pas clair. Je propose une reformulation, | Ce qui suit n'est pas clair. Je propose une reformulation, | ||
| - | --- //[[wiki:user: | + | --- // |
| </ | </ | ||
| + | |||
| + | <WRAP center round help 60%> | ||
| + | Mise à jour afin de voir si cela convient | ||
| + | --- // | ||
| + | </ | ||
| + | |||
| + | On lance une requette WEB avec la forme suivante | ||
| Le lien dans l' | Le lien dans l' | ||
| + | <WRAP prewrap 650px> | ||
| [url]/ | [url]/ | ||
| + | </ | ||
| Avec: | Avec: | ||
| Ligne 65: | Ligne 74: | ||
| * '' | * '' | ||
| * '' | * '' | ||
| + | |||
| + | |||
| + | Exemple: | ||
| + | |||
| + | | ||
| Ligne 88: | 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... | + | Demande |
| URL formatée de la façon suivante : | URL formatée de la façon suivante : | ||
| Ligne 407: | Ligne 421: | ||
| N' | N' | ||
| - | 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' |
| Ligne 415: | Ligne 429: | ||
| +---------+ | +---------+ | ||
| - | Puis pour chaque paquet Z on lit paquet Z((Ici, je ne suis pas sûre de mon ajout de '' | + | Puis pour chaque paquet Z on lit le champ '' |
| +----------+ | +----------+ | ||
| - | | Packet Z | | next | ActionFactory | + | | Packet Z | | next | ActionFactory |
| | 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 443: | Ligne 457: | ||
| +------+ | +------+ | ||
| - | === Action === | + | Voir la section Action pour ActionCode. |
| + | |||
| + | |||
| + | ==== Paquet envoyé par le client ==== | ||
| + | |||
| + | < | ||
| + | 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. | ||
| + | </ | ||
| + | |||
| + | === Corps du message === | ||
| + | |||
| + | +-------------------+------------+--- | ||
| + | | CurrentSendNumber | SystemMode | . . . | ||
| + | | 32 bits | 1 bit | | ||
| + | +-------------------+------------+--- | ||
| + | 1 -> system mode | ||
| + | 0 -> normal mode | ||
| + | |||
| + | |||
| + | |||
| + | * CurrentSendNumber : un compteur qui s' | ||
| + | * SystemMode : Informe que le type de message est dit " | ||
| + | |||
| + | |||
| + | === 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' | ||
| + | |||
| + | À 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 | ||
| + | | | ||
| + | +-------------------+------------+---------+-----------+----------+----------+-------- / ---------+ | ||
| + | | xxxxxxxxxxxxxxxx | | ||
| + | |||
| + | |||
| + | |||
| + | == Message 2 : SYSTEM_ACK_SYNC_CODE == | ||
| + | Message émis par le client. | ||
| + | Message utilisé pour acquitter d'une demande de synchronisation. | ||
| + | |||
| + | +-------------------+------------+---------+-----------+----------+-----------------+----------+ | ||
| + | | CurrentSendNumber | SystemMode | Message | frontack | ||
| + | | 32 bits | 1 bit | 8 Bits | 32 bits | 32 bits | 1024 bits | 32 bits | | ||
| + | | | ||
| + | +-------------------+------------+---------+-----------+----------+-----------------+----------+ | ||
| + | | xxxxxxxxxxxxxxxx | | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | |||
| + | == 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 | | ||
| + | | | ||
| + | +-------------------+------------+---------+-------------+---------+---------+-- / --+---------+ | ||
| + | | xxxxxxxxxxxxxxxx | | ||
| + | |||
| + | |||
| + | == Message 5 : SYSTEM_DISCONNECTION_CODE == | ||
| + | Message émis par le client. | ||
| + | |||
| + | +-------------------+------------+---------+ | ||
| + | | CurrentSendNumber | SystemMode | Message | | ||
| + | | 32 bits | 1 bit | 8 Bits | | ||
| + | | | ||
| + | +-------------------+------------+---------+ | ||
| + | | xxxxxxxxxxxxxxxx | | ||
| + | |||
| + | |||
| + | == Message 8 : SYSTEM_QUIT_CODE == | ||
| + | Message émis par le client. | ||
| + | |||
| + | +-------------------+------------+---------+---------+ | ||
| + | | CurrentSendNumber | SystemMode | Message | Quit Id | | ||
| + | | 32 bits | 1 bit | 8 Bits | 32 bits | | ||
| + | | | ||
| + | +-------------------+------------+---------+---------+ | ||
| + | | xxxxxxxxxxxxxxxx | | ||
| + | |||
| + | |||
| + | |||
| + | === Message normal === | ||
| + | |||
| + | |||
| + | +-------------------+------------+---- | ||
| + | | CurrentSendNumber | SystemMode | . . . | ||
| + | | 32 bits | 1 bit | | ||
| + | +-------------------+------------+---- | ||
| + | | xxxxxxxxxxxxxxxx | | ||
| + | |||
| + | À remplir. | ||
| + | |||
| + | ===== Les différents groupes de données ===== | ||
| + | |||
| + | ==== Action | ||
| Nous avons différents type '' | Nous avons différents type '' | ||
| Ligne 582: | Ligne 713: | ||
| - | === Impulse === | + | ==== Impulse |
| + | |||
| + | === Comment ça marche | ||
| Ici, nous allons utilisé la structure '' | Ici, nous allons utilisé la structure '' | ||
| Ligne 652: | Ligne 785: | ||
| - | == Décodage Impulse == | ||
| - | Les messages impulses sont construits suivant le format suivant : | + | == Lecture |
| - | * premier champ contenant le code '' | + | |
| - | * champs suivants : les paramètres | + | |
| - | 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: | + | <code xml> |
| + | < | ||
| + | <!-- dans cette zone existe des informations non utilisés par le client --> | ||
| + | </ | ||
| + | <branch name=x1 bank=" | ||
| + | < | ||
| + | </ | ||
| + | <branch name=x3 bank=" | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | <branch name=x6 bank=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| - | Commande utilisée pour initialiser | + | Nous trouvons |
| - | 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 | + | Ici le premier niveau qui nous interrese est database_description, puis ensuite |
| + | Pour la partie branche, cet élément peut contenir d' | ||
| - | Code actuel : '' | + | Si une branch contient le mot de clef " |
| - | <WRAP center round important 60%> | + | Ensuite, nous avons la possibilité d'avoir le mot clef 'atom', s'il est à 1, cela implique une gestion différente |
| - | Attention : dépend de la version que vous avez de '' | + | |
| - | </WRAP> | + | |
| + | L' | ||
| - | +----------------+--------------+------------------+ | + | Un petit exemple: |
| - | | STRING_MANAGER | RELOAD_CACHE | timestamp | + | |
| - | | 6 bits | 3 bits | uint32 | + | |
| - | | 011011 | + | |
| - | +----------------+--------------+------------------+ | + | |
| - | * '' | + | <code xml> |
| + | < | ||
| + | | ||
| + | | ||
| + | <branch name=" | ||
| + | count=" | ||
| + | < | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | </ | ||
| + | < | ||
| + | bank=" | ||
| + | atom=" | ||
| + | <leaf name=" | ||
| + | type=" | ||
| + | <branch name=" | ||
| + | count=" | ||
| + | <leaf name=" | ||
| + | type=" | ||
| + | </ | ||
| + | <branch name=" | ||
| + | count=" | ||
| + | <leaf name=" | ||
| + | type=" | ||
| + | </ | ||
| + | </ | ||
| - | == STRING_MANAGER: | + | < |
| + | bank=" | ||
| + | <branch name="" | ||
| + | count=" | ||
| + | atom=" | ||
| + | <leaf name=" | ||
| + | type=" | ||
| + | <leaf name=" | ||
| + | type=" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| - | Le serveur envoie un message, plus précisément le pointeur sur le message. | + | < |
| + | * 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 actuel | + | Par exemple le message suivant |
| + | 00.0.10.11111111 | ||
| + | * 00 : < | ||
| + | * 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: | ||
| + | |||
| + | 2ème exemple : | ||
| + | 01.0010100.11111111111111111111111111111111.01111111111111111111111111111111 | ||
| - | <WRAP center round important 60%> | + | * 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. |
| - | Attention : dépend de la version | + | * 0010100 : < |
| - | </WRAP> | + | * 11111111111111111111111111111111 : <VALUE> 4294967295 |
| - | | + | * 01111111111111111111111111111111 : < |
| - | | STRING_MANAGER | PHRASE_SEND | + | |
| - | | + | |
| - | | + | |
| - | +----------------+--------------+------------------+------------------+ | + | |
| - | * '' | + | 3ème exemple |
| - | * '' | + | 10.010.0.1 |
| + | * 10 : < | ||
| + | * 010 : < | ||
| + | * 0 : < | ||
| + | * 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 | ||
| - | | 6 bits | 3 bits | uint32 | ||
| - | | 011011 | ||
| - | +----------------+--------------+------------------+ | ||
| - | * '' | ||
| - | Le serveur va répondre à ce message par '' | + | == Décodage Impulse == |
| - | == STRING_MANAGER:STRING_RESP == | + | Les messages impulses sont construits suivant le format suivant |
| + | * premier champ contenant le code '' | ||
| + | * champs suivants : les paramètres du code '' | ||
| - | Le serveur renvoie | + | Cela donne le schéma suivant : |
| - | Code actuel : '' | + | +--------------+---- / -----+ |
| + | | code msg.xml | paramètres | | ||
| + | | x bits | x bits | | ||
| + | | unsigned | ||
| + | +--------------+---- / -----+ | ||
| - | +----------------+--------------+------------------+--------------+ | + | === Commande impulse === |
| - | | STRING_MANAGER | STRING_RESP | + | |
| - | | 6 bits | 3 bits | uint32 | + | |
| - | | 011011 | + | |
| - | +----------------+--------------+------------------+--------------+ | + | |
| - | * '' | + | == TARGET:PARTY == |
| - | * '' | + | |
| - | On remarque ici l' | + | == TARGET: |
| + | == TARGET: | ||
| - | == 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 : '' | + | |
| - | + | ||
| - | <WRAP center round important 60%> | + | |
| - | Attention : dépend de la version que vous avez de msg.xml, suceptible de changer. | + | |
| - | </ | + | |
| - | + | ||
| - | +----------------+--------------+------------------+------------------+ | + | |
| - | | CONNECTION | + | |
| - | | 6 bits | 5 bits | X bits | Uint32 | + | |
| - | | 000001 | + | |
| - | +----------------+--------------+------------------+------------------+ | + | |
| - | + | ||
| - | + | ||
| - | * Name (String-UTF-16) | + | |
| - | * HomeSessionId (Uint32) | + | |
| - | + | ||
| - | Retour attendu : '' | + | |
| - | + | ||
| - | + | ||
| - | == CONNECTION: | + | |
| - | + | ||
| - | Le serveur répond à une requête '' | + | |
| - | + | ||
| - | + | ||
| - | Code actuel : '' | + | |
| - | + | ||
| - | <WRAP center round important 60%> | + | |
| - | Attention: dépend de la version que vous avez de msg.xml, susceptible de changer.</ | + | |
| - | + | ||
| - | + | ||
| - | +----------------+--------------+-----------------+ | + | |
| - | | CONNECTION | + | |
| - | | 6 bits | 5 bits | 8 bits | | + | |
| - | | 000001 | + | |
| - | +----------------+--------------+-----------------+ | + | |
| - | + | ||
| - | + | ||
| - | * valide (Uint8) : 1 => valide, sinon non valide | + | |
| - | + | ||
| - | + | ||
| - | == CONNECTION: | + | |
| - | + | ||
| - | Le client sélectionne un personnage. | + | |
| - | + | ||
| - | Code actuel : '' | + | |
| - | + | ||
| - | <WRAP center round important 60%> | + | |
| - | Attention: dépend de la version que vous avez de msg.xml, susceptible de changer. | + | |
| - | </ | + | |
| - | + | ||
| - | + | ||
| - | +----------------+--------------+-----------------+ | + | |
| - | | CONNECTION | + | |
| - | | 6 bits | 5 bits | 8 bits | | + | |
| - | | 000001 | + | |
| - | +----------------+--------------+-----------------+ | + | |
| - | + | ||
| - | + | ||
| - | * 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: | == CONNECTION: | ||
| Ligne 838: | 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: |
| - | Code actuel : '' | ||
| - | |||
| - | <WRAP center round important 60%> | ||
| - | Attention : dépend de la version que vous avez de msg.xml, susceptible de changer. | ||
| - | </ | ||
| - | |||
| - | |||
| - | +------------+------------+--------------+ | ||
| - | | CONNECTION | READY | LanguageCode | | ||
| - | | 6 bits | 5 bits | String | ||
| - | | 000001 | ||
| - | +------------+------------+--------------+ | ||
| - | |||
| - | * LanguageCode (String) | ||
| - | |||
| - | |||
| - | == CONNECTION: | ||
| Liste tous les paramètres de l' | Liste tous les paramètres de l' | ||
| Ligne 906: | Ligne 1068: | ||
| == CONNECTION: | == CONNECTION: | ||
| + | |||
| Création d'un nouveau personnage. | Création d'un nouveau personnage. | ||
| Ligne 957: | Ligne 1120: | ||
| - | == GUILD:USE_FEMALE_TITLES | + | == CONNECTION:SELECT_CHAR |
| - | Le serveur signale que la guilde((Le MMORPG utilise | + | Le client sélectionne |
| - | Code actuel : '' | + | Code actuel : '' |
| + | |||
| + | <WRAP center round important 60%> | ||
| + | Attention: dépend de la version que vous avez de msg.xml, susceptible de changer. | ||
| + | </ | ||
| + | |||
| + | |||
| + | +----------------+--------------+-----------------+ | ||
| + | | CONNECTION | ||
| + | | 6 bits | 5 bits | 8 bits | | ||
| + | | 000001 | ||
| + | +----------------+--------------+-----------------+ | ||
| + | |||
| + | |||
| + | * 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: | ||
| + | |||
| + | == CONNECTION: | ||
| + | |||
| + | == CONNECTION: | ||
| + | |||
| + | == CONNECTION: | ||
| + | |||
| + | Le serveur informe au client qu'il est prêt, puis le client informe ensuite au serveur qu'il est prêt. | ||
| + | |||
| + | Code actuel : '' | ||
| <WRAP center round important 60%> | <WRAP center round important 60%> | ||
| Ligne 967: | Ligne 1159: | ||
| </ | </ | ||
| - | +------------+-------------------+--------------------+ | ||
| - | | GUILD | USE_FEMALE_TITLES | UseFemaleTitles | ||
| - | | 6 bits | 5 bits | bool | | ||
| - | | 011100 | ||
| - | +------------+-------------------+--------------------+ | ||
| - | | + | +------------+------------+--------------+ |
| + | | CONNECTION | READY | LanguageCode | | ||
| + | | 6 bits | 5 bits | String | ||
| + | | 000001 | ||
| + | +------------+------------+--------------+ | ||
| + | |||
| + | * LanguageCode | ||
| + | |||
| + | |||
| + | == CONNECTION: | ||
| + | |||
| + | == CONNECTION: | ||
| + | |||
| + | Le client donne le nom et son ID (zone ?) et demande une vérification côté serveur. | ||
| + | |||
| + | Code actuel : '' | ||
| + | |||
| + | <WRAP center round important 60%> | ||
| + | Attention : dépend de la version que vous avez de msg.xml, suceptible de changer. | ||
| + | </ | ||
| + | |||
| + | +----------------+--------------+------------------+------------------+ | ||
| + | | CONNECTION | ||
| + | | 6 bits | 5 bits | X bits | Uint32 | ||
| + | | 000001 | ||
| + | +----------------+--------------+------------------+------------------+ | ||
| + | |||
| + | |||
| + | * Name (String-UTF-16) | ||
| + | * HomeSessionId (Uint32) | ||
| + | |||
| + | Retour attendu : '' | ||
| + | |||
| + | |||
| + | == CONNECTION: | ||
| + | |||
| + | Le serveur répond à une requête '' | ||
| + | |||
| + | |||
| + | Code actuel : '' | ||
| + | |||
| + | <WRAP center round important 60%> | ||
| + | Attention: dépend de la version que vous avez de msg.xml, susceptible de changer.</ | ||
| + | |||
| + | |||
| + | +----------------+--------------+-----------------+ | ||
| + | | CONNECTION | ||
| + | | 6 bits | 5 bits | 8 bits | | ||
| + | | 000001 | ||
| + | +----------------+--------------+-----------------+ | ||
| + | |||
| + | |||
| + | * valide (Uint8) : 1 => valide, sinon non valide | ||
| + | |||
| + | |||
| + | == CONNECTION: | ||
| + | |||
| + | == CONNECTION: | ||
| + | |||
| + | == CONNECTION: | ||
| + | |||
| + | == CONNECTION: | ||
| + | |||
| + | == CONNECTION: | ||
| + | |||
| + | == CONNECTION: | ||
| + | |||
| + | == CONNECTION: | ||
| + | |||
| + | == CONNECTION: | ||
| + | |||
| + | == CONNECTION: | ||
| + | |||
| + | == CONNECTION: | ||
| + | |||
| + | == CONNECTION: | ||
| + | |||
| + | == CONNECTION: | ||
| + | |||
| + | == CONNECTION: | ||
| + | |||
| + | == DB_INIT:PLR == | ||
| + | |||
| + | == DB_INIT:INV == | ||
| + | |||
| + | == DB_GROUP: | ||
| + | |||
| + | == DB_GROUP: | ||
| + | |||
| + | == DB_GROUP: | ||
| + | |||
| + | == HARVEST: | ||
| + | |||
| + | == HARVEST: | ||
| + | |||
| + | == HARVEST: | ||
| + | |||
| + | == HARVEST: | ||
| + | |||
| + | == JOB: | ||
| + | |||
| + | == JOB: | ||
| + | |||
| + | == CASTING: | ||
| + | |||
| + | == CASTING: | ||
| + | |||
| + | == FABER:OPEN == | ||
| + | |||
| + | == FABER:CLOSE == | ||
| + | |||
| + | == FABER: | ||
| + | |||
| + | == FABER: | ||
| + | |||
| + | == FABER: | ||
| + | |||
| + | == FABER: | ||
| + | |||
| + | == FABER: | ||
| + | |||
| + | == FABER: | ||
| + | |||
| + | == FABER: | ||
| + | |||
| + | == FABER: | ||
| + | |||
| + | == FABER: | ||
| + | |||
| + | == FABER: | ||
| + | |||
| + | == COMBAT: | ||
| + | |||
| + | == COMBAT: | ||
| + | |||
| + | == COMBAT: | ||
| + | |||
| + | == COMBAT: | ||
| + | |||
| + | == COMBAT: | ||
| + | |||
| + | == COMBAT: | ||
| + | |||
| + | == COMBAT: | ||
| + | |||
| + | == COMBAT: | ||
| + | |||
| + | == COMBAT: | ||
| + | |||
| + | == COMBAT: | ||
| + | |||
| + | == COMBAT: | ||
| + | |||
| + | == STRING:TELL == | ||
| + | |||
| + | == STRING: | ||
| + | |||
| + | == STRING:CHAT == | ||
| + | |||
| + | == STRING: | ||
| + | |||
| + | == STRING: | ||
| + | |||
| + | == STRING: | ||
| + | |||
| + | == STRING: | ||
| + | |||
| + | == STRING: | ||
| + | |||
| + | == STRING: | ||
| + | |||
| + | == STRING: | ||
| + | |||
| + | == STRING: | ||
| + | |||
| + | == STRING: | ||
| + | |||
| + | == STUN:STUN == | ||
| + | |||
| + | == STUN: | ||
| + | |||
| + | == SENTENCE: | ||
| + | |||
| + | == SENTENCE: | ||
| + | |||
| + | == SENTENCE: | ||
| + | |||
| + | == SENTENCE: | ||
| + | |||
| + | == SENTENCE: | ||
| + | |||
| + | == SENTENCE: | ||
| + | |||
| + | == SENTENCE: | ||
| + | |||
| + | == SENTENCE: | ||
| + | |||
| + | == SENTENCE: | ||
| + | |||
| + | == SENTENCE: | ||
| + | |||
| + | == SENTENCE: | ||
| + | |||
| + | == SENTENCE: | ||
| + | |||
| + | == TEAM:JOIN == | ||
| + | |||
| + | == TEAM:LEAVE == | ||
| + | |||
| + | == TEAM: | ||
| + | |||
| + | == TEAM: | ||
| + | |||
| + | == TEAM: | ||
| + | |||
| + | == TEAM:KICK == | ||
| + | |||
| + | == TEAM: | ||
| + | |||
| + | == TEAM: | ||
| + | |||
| + | == TEAM: | ||
| + | |||
| + | == TEAM: | ||
| + | |||
| + | == TEAM: | ||
| + | |||
| + | == TEAM: | ||
| + | |||
| + | == TEAM: | ||
| + | |||
| + | == TEAM: | ||
| + | |||
| + | == TEAM: | ||
| + | |||
| + | == TEAM: | ||
| + | |||
| + | == TEAM: | ||
| + | |||
| + | == TEAM: | ||
| + | |||
| + | == TEAM: | ||
| + | |||
| + | == TEAM: | ||
| + | |||
| + | == ITEM:DROP == | ||
| + | |||
| + | == ITEM: | ||
| + | |||
| + | == ITEM: | ||
| + | |||
| + | == ITEM:SWAP == | ||
| + | |||
| + | == ITEM: | ||
| + | |||
| + | == ITEM: | ||
| + | |||
| + | == ITEM: | ||
| + | |||
| + | == ITEM:GIVE == | ||
| + | |||
| + | == ITEM: | ||
| + | |||
| + | == ITEM:EQUIP == | ||
| + | |||
| + | == ITEM: | ||
| + | |||
| + | == ITEM: | ||
| + | |||
| + | == ITEM: | ||
| + | |||
| + | == ITEM: | ||
| + | |||
| + | == ITEM: | ||
| + | |||
| + | == ITEM: | ||
| + | |||
| + | == ITEM: | ||
| + | |||
| + | == ITEM: | ||
| + | |||
| + | == ITEM: | ||
| + | |||
| + | == TP:RESPAWN == | ||
| + | |||
| + | == TP:BOT == | ||
| + | |||
| + | == TP:WANTED == | ||
| + | |||
| + | == TP:DEST == | ||
| + | |||
| + | == TP: | ||
| + | |||
| + | == TP:ACK == | ||
| + | |||
| + | == TP:CORRECT == | ||
| + | |||
| + | == DEATH: | ||
| + | |||
| + | == DEATH: | ||
| + | |||
| + | == DEATH: | ||
| + | |||
| + | == ANIMALS: | ||
| + | |||
| + | == ANIMALS: | ||
| + | |||
| + | == EXCHANGE: | ||
| + | |||
| + | == EXCHANGE: | ||
| + | |||
| + | == EXCHANGE: | ||
| + | |||
| + | == EXCHANGE: | ||
| + | |||
| + | == EXCHANGE: | ||
| + | |||
| + | == EXCHANGE: | ||
| + | |||
| + | == EXCHANGE: | ||
| + | |||
| + | == EXCHANGE: | ||
| + | |||
| + | == EXCHANGE: | ||
| + | |||
| + | == EXCHANGE: | ||
| + | |||
| + | == EXCHANGE: | ||
| + | |||
| + | == DEBUG:WHERE == | ||
| + | |||
| + | == DEBUG:WHO == | ||
| + | |||
| + | == DEBUG: | ||
| + | |||
| + | == DEBUG: | ||
| + | |||
| + | == DEBUG:CMD == | ||
| + | |||
| + | == DEBUG:PING == | ||
| + | |||
| + | == DEBUG: | ||
| + | |||
| + | == COMMAND: | ||
| + | |||
| + | == COMMAND: | ||
| + | |||
| + | == COMMAND: | ||
| + | |||
| + | == COMMAND: | ||
| + | |||
| + | == COMMAND: | ||
| + | |||
| + | == COMMAND: | ||
| + | |||
| + | == COMMAND: | ||
| + | |||
| + | == COMMAND:SIT == | ||
| + | |||
| + | == COMMAND:AFK == | ||
| + | |||
| + | == COMMAND: | ||
| + | |||
| + | == COMMAND: | ||
| + | |||
| + | == MP_EVAL: | ||
| + | |||
| + | == MP_EVAL: | ||
| + | |||
| + | == MP_EVAL: | ||
| + | |||
| + | == MP_EVAL: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT:BUY == | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| == BOTCHAT: | == BOTCHAT: | ||
| + | |||
| Le client informe de certains filtres. | Le client informe de certains filtres. | ||
| Ligne 986: | 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' | 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' | ||
| - | --- //[[wiki:user: | + | --- // |
| </ | </ | ||
| <WRAP center round tip 60%> | <WRAP center round tip 60%> | ||
| En fait, tout ce qui est ' | En fait, tout ce qui est ' | ||
| - | --- //[[wiki:user: | + | --- // |
| </ | </ | ||
| Ligne 1017: | Ligne 1600: | ||
| * itemType (Uint8) | * itemType (Uint8) | ||
| - | === Visual Property === | + | |
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT:END == | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == BOTCHAT: | ||
| + | |||
| + | == JOURNAL: | ||
| + | |||
| + | == JOURNAL: | ||
| + | |||
| + | == JOURNAL: | ||
| + | |||
| + | == JOURNAL: | ||
| + | |||
| + | == JOURNAL: | ||
| + | |||
| + | == JOURNAL: | ||
| + | |||
| + | == JOURNAL: | ||
| + | |||
| + | == JOURNAL: | ||
| + | |||
| + | == STRING_MANAGER: | ||
| + | |||
| + | == STRING_MANAGER: | ||
| + | |||
| + | Le serveur envoie un message, plus précisément le pointeur sur le message. | ||
| + | |||
| + | Code actuel : '' | ||
| + | |||
| + | <WRAP center round important 60%> | ||
| + | Attention : dépend de la version que vous avez de '' | ||
| + | </ | ||
| + | +----------------+--------------+------------------+------------------+ | ||
| + | | STRING_MANAGER | PHRASE_SEND | ||
| + | | 6 bits | 3 bits | uint32 | ||
| + | | 011011 | ||
| + | +----------------+--------------+------------------+------------------+ | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | |||
| + | == STRING_MANAGER: | ||
| + | |||
| + | Le client demande le message complet en fonction du pointeur. | ||
| + | |||
| + | Code actuel : '' | ||
| + | |||
| + | +----------------+--------------+------------------+ | ||
| + | | STRING_MANAGER | STRING_RQ | ||
| + | | 6 bits | 3 bits | uint32 | ||
| + | | 011011 | ||
| + | +----------------+--------------+------------------+ | ||
| + | |||
| + | * '' | ||
| + | |||
| + | Le serveur va répondre à ce message par '' | ||
| + | |||
| + | == STRING_MANAGER: | ||
| + | |||
| + | Le serveur renvoie le message complet. | ||
| + | |||
| + | Code actuel : '' | ||
| + | |||
| + | +----------------+--------------+------------------+--------------+ | ||
| + | | STRING_MANAGER | STRING_RESP | ||
| + | | 6 bits | 3 bits | uint32 | ||
| + | | 011011 | ||
| + | +----------------+--------------+------------------+--------------+ | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | On remarque ici l' | ||
| + | |||
| + | |||
| + | == STRING_MANAGER: | ||
| + | |||
| + | 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 : '' | ||
| + | |||
| + | <WRAP center round important 60%> | ||
| + | Attention : dépend de la version que vous avez de '' | ||
| + | </ | ||
| + | |||
| + | |||
| + | +----------------+--------------+------------------+ | ||
| + | | STRING_MANAGER | RELOAD_CACHE | timestamp | ||
| + | | 6 bits | 3 bits | uint32 | ||
| + | | 011011 | ||
| + | +----------------+--------------+------------------+ | ||
| + | |||
| + | * '' | ||
| + | |||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | == GUILD:QUIT == | ||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | Le serveur signale que la guilde((Le MMORPG utilise un système de " | ||
| + | |||
| + | Code actuel : '' | ||
| + | |||
| + | <WRAP center round important 60%> | ||
| + | Attention : dépend de la version que vous avez de msg.xml, susceptible de changer. | ||
| + | </ | ||
| + | |||
| + | +------------+-------------------+--------------------+ | ||
| + | | GUILD | USE_FEMALE_TITLES | UseFemaleTitles | ||
| + | | 6 bits | 5 bits | bool | | ||
| + | | 011100 | ||
| + | +------------+-------------------+--------------------+ | ||
| + | |||
| + | * UseFemaleTitles (bool) : 1 = Oui, 0 = Non | ||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | == GUILD: | ||
| + | |||
| + | == OUTPOST: | ||
| + | |||
| + | == OUTPOST: | ||
| + | |||
| + | == OUTPOST: | ||
| + | |||
| + | == OUTPOST: | ||
| + | |||
| + | == OUTPOST: | ||
| + | |||
| + | == OUTPOST: | ||
| + | |||
| + | == OUTPOST: | ||
| + | |||
| + | == OUTPOST: | ||
| + | |||
| + | == OUTPOST: | ||
| + | |||
| + | == OUTPOST: | ||
| + | |||
| + | == OUTPOST: | ||
| + | |||
| + | == OUTPOST: | ||
| + | |||
| + | == OUTPOST: | ||
| + | |||
| + | == OUTPOST: | ||
| + | |||
| + | == OUTPOST: | ||
| + | |||
| + | == OUTPOST: | ||
| + | |||
| + | == OUTPOST: | ||
| + | |||
| + | == OUTPOST: | ||
| + | |||
| + | == PHRASE: | ||
| + | |||
| + | == PHRASE: | ||
| + | |||
| + | == PHRASE: | ||
| + | |||
| + | == PHRASE: | ||
| + | |||
| + | == PHRASE: | ||
| + | |||
| + | == PHRASE: | ||
| + | |||
| + | == PHRASE: | ||
| + | |||
| + | == PHRASE: | ||
| + | |||
| + | == PHRASE:BUY == | ||
| + | |||
| + | == PHRASE: | ||
| + | |||
| + | == PHRASE: | ||
| + | |||
| + | == PHRASE: | ||
| + | |||
| + | == PHRASE: | ||
| + | |||
| + | == PHRASE: | ||
| + | |||
| + | == PHRASE: | ||
| + | |||
| + | == PHRASE: | ||
| + | |||
| + | == PHRASE: | ||
| + | |||
| + | == ITEM_INFO: | ||
| + | |||
| + | == ITEM_INFO: | ||
| + | |||
| + | == ITEM_INFO: | ||
| + | |||
| + | == MISSION_PREREQ: | ||
| + | |||
| + | == MISSION_PREREQ: | ||
| + | |||
| + | == MISSION: | ||
| + | |||
| + | == MISSION: | ||
| + | |||
| + | == MISSION: | ||
| + | |||
| + | == MISSION: | ||
| + | |||
| + | == MISSION: | ||
| + | |||
| + | == DUEL:ASK == | ||
| + | |||
| + | == DUEL:ACCEPT == | ||
| + | |||
| + | == DUEL:REFUSE == | ||
| + | |||
| + | == DUEL: | ||
| + | |||
| + | == DUEL: | ||
| + | |||
| + | == DUEL: | ||
| + | |||
| + | == PVP_CHALLENGE: | ||
| + | |||
| + | == PVP_CHALLENGE: | ||
| + | |||
| + | == PVP_CHALLENGE: | ||
| + | |||
| + | == PVP_CHALLENGE: | ||
| + | |||
| + | == PVP_CHALLENGE: | ||
| + | |||
| + | == PVP_CHALLENGE: | ||
| + | |||
| + | == PVP:PVP_TAG == | ||
| + | |||
| + | == PVP: | ||
| + | |||
| + | == PVP: | ||
| + | |||
| + | == PVP_FACTION: | ||
| + | |||
| + | == PVP_FACTION: | ||
| + | |||
| + | == PVP_FACTION: | ||
| + | |||
| + | == ENCYCLOPEDIA: | ||
| + | |||
| + | == ENCYCLOPEDIA: | ||
| + | |||
| + | == USER:BARS == | ||
| + | |||
| + | == USER:POPUP == | ||
| + | |||
| + | == EVENT: | ||
| + | |||
| + | == EVENT:DUMMY == | ||
| + | |||
| + | == TOTEM:BUILD == | ||
| + | |||
| + | == TOTEM:DUMMY == | ||
| + | |||
| + | == MODULE_GATEWAY: | ||
| + | |||
| + | == MODULE_GATEWAY: | ||
| + | |||
| + | == MODULE_GATEWAY: | ||
| + | |||
| + | == SEASON:SET == | ||
| + | |||
| + | == SEASON: | ||
| + | |||
| + | == DM_GIFT: | ||
| + | |||
| + | == DM_GIFT: | ||
| + | |||
| + | == RING_MISSION: | ||
| + | |||
| + | == RING_MISSION: | ||
| + | |||
| + | == NPC_ICON: | ||
| + | |||
| + | == NPC_ICON: | ||
| + | |||
| + | == NPC_ICON: | ||
| + | |||
| + | == NPC_ICON: | ||
| + | |||
| + | |||
| + | |||
| + | ==== 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 1023: | Ligne 1976: | ||
| Ici le codage/ | Ici le codage/ | ||
| - | ==== 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' |
| - | | CurrentSendNumber | SystemMode | . . . | + | |
| - | | 32 bits | 1 bit | | + | |
| - | +-------------------+------------+--- | + | |
| - | 1 -> system mode | + | |
| - | 0 -> normal mode | + | |
| + | Visiblement, | ||
| + | Le début de la structure: | ||
| - | | + | +----------+-----------------+------------------+----------------+------------------+ |
| - | * SystemMode : Informe que le type de message est dit " | + | | Slot | associationBits | timestampIsThere | timestampDelta | VisualProperties | |
| + | | 8 Bits | ||
| + | | unsigned | | ||
| + | +----------+-----------------+------------------+----------------+------------------+ | ||
| + | |||
| + | * slot : position/ | ||
| + | * associationBits : un indicateur (sorte de clef de hachage) pour savoir si on parle de la même donnée, sinon l' | ||
| + | * timestampIsThere : active le delta sur le timestamp (0: non, 1:oui) | ||
| + | * timestampDelta : permet d' | ||
| + | * 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. | + | {{: |
| - | == 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 | + | |
| - | | | + | |
| - | +-------------------+------------+---------+-----------+----------+----------+-------- / ---------+ | + | |
| - | | xxxxxxxxxxxxxxxx | | + | |
| + | == 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. | ||
| - | +-------------------+------------+---------+-----------+----------+-----------------+----------+ | + | |
| - | | CurrentSendNumber | SystemMode | Message | frontack | + | |
| - | | 32 bits | 1 bit | 8 Bits | 32 bits | + | |
| - | | + | |
| - | | + | |
| - | | xxxxxxxxxxxxxxxx | | + | |
| - | * '' | + | +-------------------------------+ |
| - | * '' | + | | pz | |
| - | * '' | + | | 14 bit | |
| - | * '' | + | | | | | | | | | | | | | | | | | | | | |
| + | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||
| + | + 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 | | + | |
| - | | | + | |
| - | +-------------------+------------+---------+-------------+---------+---------+-- / --+---------+ | + | |
| - | | xxxxxxxxxxxxxxxx | | + | |
| + | +-------------+ | ||
| + | | 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 | | + | | 3 Bits |
| - | | | | | | + | | Unsigned |
| - | +-------------------+------------+---------+ | + | +--------------+ |
| - | | xxxxxxxxxxxxxxxx | | + | |
| + | == 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 | | + | |
| - | | | + | |
| - | +-------------------+------------+---------+---------+ | + | |
| - | | xxxxxxxxxxxxxxxx | | + | |
| + | +------------+ | ||
| + | | 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) | ||
| + | </ | ||
| + | |||
| + | == 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) | ||
| + | </ | ||
| + | |||
| + | == 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 1136: | Ligne 2227: | ||
| ==== bool : 1 bit ==== | ==== bool : 1 bit ==== | ||
| - | Juste un bit, vrai ou faux (true/ | + | Juste un bit, vrai ou faux (true [1]/ |
| +-------+ | +-------+ | ||
| Ligne 1234: | Ligne 2325: | ||
| + | |||
| + | ===== Annexe : Exemple de communication ===== | ||
| + | |||
| + | ==== Exemple d' | ||
| + | |||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Source -> Dest. | Message | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | CONNECTION/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Client -> Serveur | CONNECTION/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | CONNECTION/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Client -> Serveur | CONNECTION/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | CONNECTION/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Client -> Serveur | CONNECTION/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | CONNECTION/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Client -> Serveur | CONNECTION/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | CONNECTION/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | TEAM/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | PHRASE/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | GUILD/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Client -> Serveur | BOTCHAT/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Client -> Serveur | POSITION (X, Y, Z, Heading) | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Client -> Serveur | DEBUG/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | DEATH/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | STRING/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | PHRASE/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | ENCYCLOPEDIA/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | DB_INIT/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Client -> Serveur | NPC_ICON/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | STRING_MANAGER/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | USER/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | NPC_ICON/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | VisualProperty/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | DB_INIT/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | DB_GROUP/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | DB_UPD_PLR | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | PVP_EFFECTS/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | DB_UPD_PLR/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | |||
| + | |||
| + | ==== Exemple d' | ||
| + | |||
| + | Dans les faits, le serveur envoie des identifiant pour le message, si le client ne connais pas l' | ||
| + | |||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Source -> Dest. | Message | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | STRING_MANAGER/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Client -> Serveur | STRING_MANAGER/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | STRING_MANAGER/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | |||
| + | Ex.: | ||
| + | Le serveur demande d' | ||
| + | 7705 : & | ||
| + | 7849 : Dispensaire | ||
| + | 7859 : Terres Contrôlées | ||
| + | | ||
| + | Cela donne le message : & | ||
| + | |||
| + | |||
| + | |||
| + | ===== Annexe : Exemple de communication ===== | ||
| + | |||
| + | ==== Exemple d' | ||
| + | |||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Source -> Dest. | Type de message | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | CONNECTION/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Client -> Serveur | CONNECTION/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | CONNECTION/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Client -> Serveur | CONNECTION/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | CONNECTION/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Client -> Serveur | CONNECTION/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | CONNECTION/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Client -> Serveur | CONNECTION/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | CONNECTION/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | TEAM/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | PHRASE/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | GUILD/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Client -> Serveur | BOTCHAT/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Client -> Serveur | POSITION (X, Y, Z, Heading) | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Client -> Serveur | DEBUG/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | DEATH/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | STRING/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | PHRASE/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | ENCYCLOPEDIA/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | DB_INIT/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Client -> Serveur | NPC_ICON/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | STRING_MANAGER/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | USER/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | NPC_ICON/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | VisualProperty/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | DB_INIT/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | DB_GROUP/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | DB_UPD_PLR | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | PVP_EFFECTS/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | DB_UPD_PLR/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | |||
| + | ==== Exemple d' | ||
| + | |||
| + | Dans les faits, le serveur envoie des identifiant pour le message, si le client ne connais pas l' | ||
| + | |||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Source -> Dest. | Type de message | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | STRING_MANAGER/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Client -> Serveur | STRING_MANAGER/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | | Serveur -> Client | STRING_MANAGER/ | ||
| + | +-------------------+--------------------------------+-------------- | ||
| + | |||
| + | Ex.: | ||
| + | Le serveur demande d' | ||
| + | 7705 : & | ||
| + | 7849 : Dispensaire | ||
| + | 7859 : Terres Contrôlées | ||
| + | | ||
| + | Cela donne le message : & | ||
| + | |||
| + | |||
| + | ===== Annexe : Analyse des structures ===== | ||
| + | |||
| + | ==== Structure du personnage ==== | ||
| + | |||
| + | La structure du personnage est différente entre la création et l' | ||
| + | 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' | ||
| + | De plus quand on recharge les personnages, | ||
| + | * * Liste à puce | ||
| + | === Structure création du personnage === | ||
| + | |||
| + | == Structure création du personnage == | ||
| + | |||
| + | Type de message : CONNECTION/ | ||
| + | |||
| + | * (Uint8) Slot | ||
| + | * (Uint32) SheetId | ||
| + | * (Uint32) CSessionId | ||
| + | * (Uint32) name:size | ||
| + | * (UString) name: | ||
| + | * (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 : | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | |||
| + | === Structure reception pour les autres joueurs === | ||
| + | |||
| + | Ils existent plusieurs messages qui receptionne les caractèristiques. | ||
| + | |||
| + | * Les messages du type CONNECTION/ | ||
| + | * Utilise la structure VPA, VPB & VPC | ||
| + | * Les messages du type VisualProperty (on réception les caractèristiques des différentes entités [personnages d' | ||
| + | * 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/ | ||
| + | |||
| + | * Sex : 1 bit/ | ||
| + | * 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' | ||
| + | |||
| + | == Structure VisualPropB == | ||
| + | |||
| + | VPB: VisualPropB est de type Uint64 (unsigned int 64 bits). | ||
| + | |||
| + | [Source: khanat-opennel-code/ | ||
| + | |||
| + | * 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/ | ||
| + | |||
| + | * 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> | {{tag> | ||





