Toutes les informations sur l'organisation de Khaganat, des tutos, le détail des licences et de la charte, bref tout ce qui a trait à Khaganat même !
Chroniques régulières autours du projet Khaganat pour suivre son avancement et les travaux ne trouvant pas encore leur place au niveau des wikis.
Les derniers trucs qui ont bougé sur les wikis et le forum sont condensés dans cette page.
Le forum est notre espace d’échange d’informations autour de Khaganat. Il prolonge naturellement le salon XMPP et permet une discussion construite et une prise de recul dans la manière d'aborder le projet.
Le salon XMPP : c'est le lieu premier des contacts, des échanges, là où fusent les idées autours du projet.
Vous souhaitez prendre contact avec nous par mail ?
Un espace convivial pour organiser et partager nos images liées à Khaganat.
Écrivons tous ensemble sur le même document dans une interface de rédaction collective en ligne. Aucune inscription requise, on se donne un pseudo, une couleur et on se lance !
La liste des tâches à faire, leur avancement et qui s'en occupe. Ou qui il faut aller motiver à coup de guimauve pour que ça avance. C'est aussi ici qu'on peut indiquer les bugs.
Pour contribuer au code et aux assets des différents projets de Khaganat, ou les télécharger.
Les clients de jeu, ainsi que des bidouilles à télécharger si besoin.
Petits outils variés, bidouilles web en tout genre pour aider dans certaines tâches.
Pour partager des fichiers. Tout le monde peut s'inscrire, mais limité à 100Mo par personne si vous n'êtes pas validé.
Salon audio et vidéo, accessible sans compte, via le navigateur. Allumez vos micro ! /!\ Ce n'est pas notre outil principal d'échange, préférez le salon XMPP.
Notre projet vit grâce aux dons, en nature, en temps ou en argent. Découvrez comment nous aider, afin que nous puissions aller encore plus loin !
Le Khanat est l'univers créé collectivement pour servir de cadre aux premières aventures vécues par les participants au projet Khaganat. L'Unité Mémorielle 1 (UM1) présente le savoir connu à tous les niveaux de Khanat.
La Mediateki, ou Grande Bibliothèque, regroupe un exemplaire de chaque création sur le Khanat. Littérature, arts graphiques, musique, on peut trouver de tout, sous toutes les formes.
Serveur de jeu basé sur le monde de Khanat. /!\ Actuellement tellement en test que ça ne mérite même pas le nom d'alpha !
Voici les deux codes incriminés. Le code côté Envoi de la position (coté client) - (j'ai viré du code pour simplifier)Code: [Sélectionner]// khanat-opennel-code/code/ryzom/common/src/game_share/action_position.cpp:96void CActionPosition::pack (NLMISC::CBitMemStream &message){ // Get the right position, depending on the "relative" bit, and // scale precision from 1 mm to 16 mm and take only 16 lower bits (=> 1048 m range) uint32 pxy16; uint16 posx16, posy16, posz16; posx16 = (uint16)(Position[0] >> 4); posy16 = (uint16)(Position[1] >> 4); pxy16 = ((uint32)(posx16) << 16) | (uint32)posy16; posz16 = ((uint16)(Position[2] >> 4) + 2) & ((uint16)0xFFFC); if ( IsRelative ) posz16 |= (uint16)0x1; if ( Interior ) posz16 |= (uint16)0x2; message.serialAndLog1( pxy16 ); message.serialAndLog1( posz16 );Le code coté VisualProperties - (j'ai viré du code pour simplifié)Code: [Sélectionner]// khanat-opennel-code/code/ryzom/client/src/property_decoder.cpp:73void CPropertyDecoder::receive(TPacketNumber /* packetNumber */, CAction *action){ if (action->Code == ACTION_POSITION_CODE) { CActionPosition *act = (CActionPosition *)(action); if ( act->IsRelative ) { act->Position[0] = (sint32)act->Position16[0]; act->Position[1] = (sint32)act->Position16[1]; act->Position[2] = (sint32)act->Position16[2]; _Entities[act->Slot].PosIsRelative = true; _Entities[act->Slot].PosIsInterior = false; } else { // Absolute position decodeAbsPos2D( act->Position[0], act->Position[1], act->Position16[0], act->Position16[1] ); act->Position[2] = ((sint32)((sint16)act->Position16[2])) << 4; if (act->Interior) act->Position[2] += 2; _Entities[act->Slot].PosIsRelative = false; _Entities[act->Slot].PosIsInterior = act->Interior; }et le résultat dans les capturesCode: [Sélectionner]2020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/X 88687032020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/Y -105953732020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/Z 57242020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/Heading -0.5890485644340515 2020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/px 300052020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/py 586852020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/pz 662020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/IsRelative False2020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/Interior True2020/05/14 21:58:43 packet_1779 Server1 Client2 VisualProperty/Slot_184/Sint64/PROPERTY_ORIENTATION 3200265882J'ai mis les données en bit, plus facile pour les comparaisonsCode: [Sélectionner]2020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/X 000000001000011101010011010111112020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/Y 111111110101111001010011110100112020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/Z 000000000000000000010110010111002020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/Heading 10111110011101000101101110001100 2020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/px 01110101001101012020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/py 11100101001111012020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/pz 00000000010000102020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/IsRelative False2020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/Interior True2020/05/14 21:58:43 packet_1779 Server1 Client2 VisualProperty/Slot_184/Sint64/PROPERTY_ORIENTATION 10111110110000000010111010011010si on regarde plus finement on obtient :Code: [Sélectionner]X : 00000000100001110101001101011111 => xxxxxxxxxxxx0111010100110101xxxxY : 11111111010111100101001111010011 => xxxxxxxxxxxx1110010100111101xxxxZ : 00000000000000000001011001011100 ?? 0000000001000010Heading : 10111110011101000101101110001100 ==10111110110000000010111010011010bref, on retrouve une relation entre X, Y & Heading, par contre Z (même en ajoutant +2 , cela ne marche pas)
// khanat-opennel-code/code/ryzom/common/src/game_share/action_position.cpp:96void CActionPosition::pack (NLMISC::CBitMemStream &message){ // Get the right position, depending on the "relative" bit, and // scale precision from 1 mm to 16 mm and take only 16 lower bits (=> 1048 m range) uint32 pxy16; uint16 posx16, posy16, posz16; posx16 = (uint16)(Position[0] >> 4); posy16 = (uint16)(Position[1] >> 4); pxy16 = ((uint32)(posx16) << 16) | (uint32)posy16; posz16 = ((uint16)(Position[2] >> 4) + 2) & ((uint16)0xFFFC); if ( IsRelative ) posz16 |= (uint16)0x1; if ( Interior ) posz16 |= (uint16)0x2; message.serialAndLog1( pxy16 ); message.serialAndLog1( posz16 );
// khanat-opennel-code/code/ryzom/client/src/property_decoder.cpp:73void CPropertyDecoder::receive(TPacketNumber /* packetNumber */, CAction *action){ if (action->Code == ACTION_POSITION_CODE) { CActionPosition *act = (CActionPosition *)(action); if ( act->IsRelative ) { act->Position[0] = (sint32)act->Position16[0]; act->Position[1] = (sint32)act->Position16[1]; act->Position[2] = (sint32)act->Position16[2]; _Entities[act->Slot].PosIsRelative = true; _Entities[act->Slot].PosIsInterior = false; } else { // Absolute position decodeAbsPos2D( act->Position[0], act->Position[1], act->Position16[0], act->Position16[1] ); act->Position[2] = ((sint32)((sint16)act->Position16[2])) << 4; if (act->Interior) act->Position[2] += 2; _Entities[act->Slot].PosIsRelative = false; _Entities[act->Slot].PosIsInterior = act->Interior; }
2020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/X 88687032020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/Y -105953732020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/Z 57242020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/Heading -0.5890485644340515 2020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/px 300052020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/py 586852020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/pz 662020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/IsRelative False2020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/Interior True2020/05/14 21:58:43 packet_1779 Server1 Client2 VisualProperty/Slot_184/Sint64/PROPERTY_ORIENTATION 3200265882
2020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/X 000000001000011101010011010111112020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/Y 111111110101111001010011110100112020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/Z 000000000000000000010110010111002020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/Heading 10111110011101000101101110001100 2020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/px 01110101001101012020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/py 11100101001111012020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/pz 00000000010000102020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/IsRelative False2020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/Interior True2020/05/14 21:58:43 packet_1779 Server1 Client2 VisualProperty/Slot_184/Sint64/PROPERTY_ORIENTATION 10111110110000000010111010011010
X : 00000000100001110101001101011111 => xxxxxxxxxxxx0111010100110101xxxxY : 11111111010111100101001111010011 => xxxxxxxxxxxx1110010100111101xxxxZ : 00000000000000000001011001011100 ?? 0000000001000010Heading : 10111110011101000101101110001100 ==10111110110000000010111010011010