Je ne suis pas passé loin de la catastrophe, en travaillant sur la sauvegarde des inventaires qui présentait un comportement suspect, je me suis rendu compte qu’il était impossible de lancer le jeu en multi-joueurs : le serveur happait les joueurs en boucle sur l’écran de login.
Je suis resté bloqué là-dessus très longtemps, trop longtemps, ça m’a fortement usé. Il s’avère que le serveur ne peut faire tourner qu’une seule map – ce dont je n’étais pas averti – et que l’IA m’a fait créer mes écrans de login sur une map, avec game mode et controller spécifiques avant de me transférer sur une deuxième map une fois la sélection du perso achevée.
Or, ça ne marche pas. J’ai tout testé dans tous les sens, deux jours je crois que je suis resté coincé là-dessus, rien ne marchait et l’IA, comme toujours quand elle patauge, me conseillait n’importe quoi. Et je n’avais pas d’autre choix que de suivre, puisque j’étais bloqué !
J’en ai eu assez et j’étais sur le point de me résoudre à transformer le jeu en mono-joueur, ce qui m’éviterait bien des migraines mais me contrarierait quand même fortement, quand j’ai, à force de poser des questions à l’IA, découvert que dans aucun cas de figure le serveur ne pourrait gérer plus qu’une map ! J’ai donc entrepris de transférer tout le jeu sur une seule map avec les écrans de connexion assez grands pour masquer l’arrière-plan.
C’est après avoir remporté cette victoire que je me suis replongé dans le problème insoluble de la fermeture inopinée du client ou du serveur : impossible de provoquer une sauvegarde d’urgence de l’inventaire. Les bugs adorant danser en rond en se donnant la main, chaque fois que je pensais trouver une solution, un autre bug compromettait le projet. Ca aussi, ça a duré des jours et ça aussi aurait pu sonner le glas du projet si, par le plus grand des hasards car je l’ignorais, je n’avais appris que dans Unreal tout existe en double !
Le character local n’est en fait qu’une copie du character du serveur ! Au lieu d’initialiser la variable cruciale qui persistait à m’échapper, je l’ai donc créée par un appel au serveur et répliquée ; maintenant, c’est le serveur qui l’initialise et j’ai les deux mêmes valeurs de cette variable sur le serveur et les clients.
Tout cela était tellement pénible que je n’en ai éprouvé nulle joie quand j’ai obtenu un projet parfaitement fonctionnel. Mais, paraît-il, c’est là que s’arrêtent 90% des projets multijoueurs tellement c’est une prise de tête.
Je vais encore travailler un peu sur les inventaires, notamment en créant les marchands et peut-être soit une banque soit des coffres de maison. C’était une haie particulièrement haute à sauter, mais c’est fait et à mon entière satisfaction : le code est stable.