{"id":2863,"date":"2021-05-04T11:04:52","date_gmt":"2021-05-04T09:04:52","guid":{"rendered":"http:\/\/myrdil.com\/?p=2863"},"modified":"2021-05-04T15:53:24","modified_gmt":"2021-05-04T13:53:24","slug":"les-affres-de-la-replication","status":"publish","type":"post","link":"https:\/\/myrdil.com\/?p=2863","title":{"rendered":"Les affres de la r\u00e9plication"},"content":{"rendered":"<p>C&#8217;est compliqu\u00e9.<\/p>\n<p><!--more--><\/p>\n<p>Compliqu\u00e9 est un adjectif que je d\u00e9teste, il est utilis\u00e9 \u00e0 toutes les sauces par ceux qui n&#8217;ont de notre langue qu&#8217;une connaissance lacunaire.<br \/>\n&#8211; Comment tu vas aujourd&#8217;hui ?<br \/>\n&#8211; C&#8217;est compliqu\u00e9&#8230;<br \/>\nBen non, tu vas bien, ou tu vas pas bien, mais arr\u00eate de tortiller du cul pour chier droit !<\/p>\n<p>Bon, la r\u00e9plication, par contre, c&#8217;est compliqu\u00e9 au sens \u00e9tymologique : difficile \u00e0 d\u00e9m\u00ealer. Je pensais na\u00efvement que d\u00e9clarer des variables r\u00e9pliqu\u00e9es et utiliser le n\u0153ud &#8220;Has authority&#8221; serait suffisant et il n&#8217;en est rien.<\/p>\n<p>Bien entendu, comme j&#8217;ai le pompon pour me mettre dans des situations impossibles, il a fallu que je commence mon travail par la r\u00e9plication de l&#8217;apparence des joueurs. Je suis arriv\u00e9 \u00e0 r\u00e9pliquer les boucles d&#8217;oreilles de mes fifilles, mais rien \u00e0 faire pour les pi\u00e8ces d&#8217;armure, non seulement elles ne se r\u00e9pliquent pas sur l&#8217;\u00e9cran des autres mais en plus elles ne changent m\u00eame plus sur leur propre \u00e9cran !<\/p>\n<p>C&#8217;est l\u00e0 que je me suis rendu compte apr\u00e8s fouille du net que la r\u00e9plication des skeletal meshes ne fonctionne pas correctement et qu&#8217;il faut finasser pour y arriver. Et encore, j&#8217;ai \u00e9t\u00e9 pr\u00e9venu que \u00e7a ne marchera de toutes fa\u00e7ons pas pour les clients qui se connecteront au serveur apr\u00e8s l&#8217;ex\u00e9cution du code de r\u00e9plication. \u00c7a promet.<\/p>\n<p>Pour donner une id\u00e9e des joyeuset\u00e9s auxquelles je fais face, tout a commenc\u00e9 par le choix de mode de test. Je peux lancer mes diff\u00e9rents clients en mode &#8220;standalone&#8221;, totalement inutile car cela revient \u00e0 ne pas utiliser le client-serveur du tout, en mode &#8220;listen server&#8221; qui, comme je l&#8217;ai appris apr\u00e8s de longues recherches, permet \u00e0 un client d&#8217;h\u00e9berger un serveur auquel peuvent se connecter d&#8217;autres joueurs, ou en mode &#8220;client only&#8221; qui est finalement la bonne solution car ainsi je teste exclusivement les clients et Unreal lance de mani\u00e8re transparente un serveur dans le background.<\/p>\n<p>Ensuite, il faut jongler avec des techniques qui n&#8217;ont rien d&#8217;intuitif. Par exemple, la documentation d&#8217;Unreal renseigne qu&#8217;il est possible de marquer une fonction pour la r\u00e9plication. Je n&#8217;y arrive pas. Je cherche, je peste, je cherche encore et je finis par d\u00e9couvrir qu&#8217;ils sont vraiment d\u00e9sol\u00e9s mais que tout compte fait non, \u00e7a ne marche qu&#8217;en C++. On se fout de qui l\u00e0 ?<\/p>\n<p>Je contourne la difficult\u00e9 en cr\u00e9ant des &#8220;Custom events&#8221; qui eux peuvent \u00eatre flagg\u00e9s pour s&#8217;ex\u00e9cuter sur le serveur uniquement ou sur tous les postes, apr\u00e8s quoi c&#8217;est un mic-mac pas possible pour d\u00e9terminer ce que l&#8217;on veut ex\u00e9cuter sur le serveur et la mani\u00e8re dont cela est r\u00e9pliqu\u00e9 sur les clients.<\/p>\n<p>Je n&#8217;ai pas termin\u00e9 de tout mettre en \u0153uvre, trop de travail avec mes \u00e9l\u00e8ves, je ne pourrai probablement reprendre que jeudi, c&#8217;est le genre de chantier pour lequel j&#8217;aime avoir du temps devant moi.<\/p>\n<p>Je dois aussi r\u00e9soudre un bug qui m&#8217;emp\u00eache de dormir: quand je suis en mode client, ma boule de feu s&#8217;ex\u00e9cute correctement mais une copie me reste coll\u00e9e \u00e0 l&#8217;estomac, qui se d\u00e9tache &#8211; la boule, pas l&#8217;estomac ! &#8211; quand je lance au autre sort. Probablement une faute de conception dans les vid\u00e9os de Ryan Lalay, que je ne consulte plus jamais, et qui se r\u00e9soudra peut-\u00eatre d&#8217;elle-m\u00eame lorsque j&#8217;aurai programm\u00e9 la r\u00e9plication des comp\u00e9tences.<\/p>\n<p>Je vais finir par avoir triomph\u00e9 de toutes les difficult\u00e9s techniques, mais c&#8217;est pas encore pour demain !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>C&#8217;est compliqu\u00e9.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2863","post","type-post","status-publish","format-standard","hentry","category-news"],"_links":{"self":[{"href":"https:\/\/myrdil.com\/index.php?rest_route=\/wp\/v2\/posts\/2863","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/myrdil.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/myrdil.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/myrdil.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/myrdil.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2863"}],"version-history":[{"count":0,"href":"https:\/\/myrdil.com\/index.php?rest_route=\/wp\/v2\/posts\/2863\/revisions"}],"wp:attachment":[{"href":"https:\/\/myrdil.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2863"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/myrdil.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2863"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/myrdil.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2863"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}