Merci pour l'info.
Je préfère qu'ils le retardent et fassent le boulot correctement, on n'est pas a 2 mois près.
-mois +ans
je prefere signaler la modification, parce que cela fait deja plus de 2 ans que Ankama nous le promet.
Pour ceux qui n'ont pas connu ou ne se souvienne plus, il y avait eu une période de massacre qui avait rendu nos familier immortel dès juin 2006 et retardé la MaJ des dragodindes de 4 mois ... c'était il y a 1 an et demi ! et cette période suivait la monté en puissance de Ankama suite aux lancement de Djaul, Raval, Hecate, Summens qui devaient en théorie désengorger et réduire le lag sans véritable effet.
Donc, si il nous ressortent le systeme de déco/reco ... la seule solution passera nécessairement par trois choses :
- une possibilité de dégager les animations des sorts
- un systeme de compensation du lag au niveau client et serveur
- une refonte du systeme de tour à tour pour éviter de répercuter sur les autres joueurs le systeme de compensation de lag.
pour donner un exemple du systeme de compensation avec un exemple purement théorique mais permettant de comprendre le probleme quand on le ramene à des histoire de seconde : la cummunication terre<->mars
il faut 20minutes pour qu'une onde qui part de la terre arrive sur mars ( à la vitesse de la lumiere s'entend ). si par exemple, l'on dispose d'un débit fixe garanti de 1Mo/s ( soit 8Mbps ) , pour envoyer un film de 1 Go, il faut 1 000 secondes soit pres de 20 minutes.
et comme il y 20 minutes entre la reception sur mars et l'envoi, il faut 40 minutes pour tout transferer si tout se passe bien.
Maintenant, imaginons que Mars subisse une déconnexion ou une perte de paquet, il faudra plus 20 minutes pour que la Terre en prenne connaissance.
cela veut dire que pour envoyer ce fichier avec un systeme de gestion d'erreur, il faut prévoir pres de 60 minutes ( aller-retour-aller ).
Maintenant, imaginons que nous utilisons TCP ( protocole plutot leger et utilisé sur internet ), l'initialisation se fait via un principe de :
1 je me connecte au serveur
2 le serveur me dit confirme tu ?
3 je confirme
et chacune des trames s'echange ainsi.
Or si l'on peut generer une fenetre d'envoi lorsque la connexion est déjà établi, on ne peut pas faire la meme chose à l'initialisation ou à la fermeture de la connexion.
Donc récapitulons :
initialisation : 3 voyage
transfert : 3 voyage avec une fenetre d'envoi de 100%
fermeture 3 voyage
donc un total de 3h pour telecharger un fichier qui aurait mis seulement 20 minutes pour faire terre <-> terre avec le meme débit.
Aujourd'hui la gestion du lag se fait comme suit dans Dofus :
De manière très simpliste, les phases en 3 voyages sont faites régulierement entre le client et le serveur ...
donc :
- 100 ms de lag représente en combat 0,3s par tentative d'action
- 1000ms de lag représente en combat 3s par tentative d'action.
- 2000ms de lag représente en combat 6s par tentative d'action.
- 3000ms de lag représente en combat 9s par tentative d'action.
donc aujourd'hui, dans un tour de combat, le lag est inclus dans le tour du joueur et n'est pas répercuté dans le tour du mob.
donc deux possibilités :
1. on synchronise mobs & joueurs au meme lag et le temps de chaque tour reste le meme
2. on exclus du temps de jeu du joueur le lag, c'est à dire qu'a chaque action du serveur ou du joueur, tous les chronometres s'arrete tant que les 3 voyages ne sont pas fait
la méthode 1 présente une certaine équité, on calle le tour sur la capacité de jeu du joueur le plus lent. mais un combat sur grob risque de devenir un véritable enfers qui risque de doubler voire tripler ( ou même pire ) le temps d'un combat au moindre lag .
la méthode 2 semble très sympa sur le papier, mais cela nécessite des compétences au niveau programmation que Ankama ne semble pas avoir ( au vue du bug résiduel de ce matin apres l'annonce d'un BillFr confiant disant ( de mémoire ) qu'à 10 tout était ok et qu'ils étaient déjà à 95% ).
la méthode 2 nécessite :
1. un synchronisation des horloges via un systeme de type NTP ( dur )
2. il faut pouvoir soit avoir 2 canaux de communication soit gerer coté serveur et client des trames de synchronisation de maniere asynchrone via un protocole pseudo connecté synchrone ( dur )
3. pouvoir gerer les contextes de type effet domino : un joueur laggue, je resynchronise le combat et là effet de cascade, un des joueurs en cours de synchro s'avere lagguer aussi ( multicompte, ou probleme FAI, ou hasard pur ) ... il faut donc resynchroniser la synchro en cours et cela de manière non bloquante avec des systèmes de stabilisation ( dur )
tout cela peut s'appeler du temps réel mou sur architecture distribué à compensation de noeuds défaillant.
maintenant, tout cela augmente la charge de traitement coté client et serveur, et quelque soit la méthode, cela introduit aussi un rallongement des combats.
Donc il reste le dernier chantier, refondre au niveau gameplay le systeme de tour à tour. Cette refonte devra passé par plusieurs étapes :
1. la possibilité de préparer à l'avance ses coups pour compenser la perte de temps induite par les systemes de compensations de lag, et de pouvoir annuler rapidement une série préparé en cas de nécessité
2. la possibilité de "scripter" des combos
3. si l'on garde la possibilité de quitter un combat en cours, il faut son pendant, la possibilité de rejoindre un combat en cours et pour se faire deverouiller le combat voire appeler à l'aide
bien entendu, cela introduit encore certaines complexité de programmation.
Quand je vois le problème de ce matin qui aurait pu être éviter, je reste sur mon impression ( et je me trompe surement ) que ce n'est pas prochainement que Ankama disposera de développeurs à la hauteur du challenge que représente un MMO puisque ce genre de profil ne se recrute pas par petite annonce.
Je reconnais volontiers que ma connaissance des problèmes des autres MMO est plutôt faible, mais dire qu'un truc semble mauvais, n'empêche en aucun cas qu'il puisse être le moins mauvais par rapport à ses concurrents.