Salut, j'ai le problème suivant :

-Le serveur envoie l'état du personnage. (mort)
-Le client remet à jour l'état du personnage. (en vie)
-Le client envoie l'état du personnage. (en vie)
-Le client reçois le message du serveur et remet à jour l'état du personnage. (mort)
Donc là déjà il ré-entre dans le else hors qu'il ne devrait pas :
Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
if (caracter->isAlive() {
} else if (caracter == hero) {
                setEventContextActivated(false);
                wResuHero->setVisible(true);
                float time = hero->getTimeBeforeLastRespawn().asSeconds() - hero->getTimeSinceLastRespawn().asSeconds();
                if (time < 0) {
                    time = 0;
                }
                label->setText(conversionIntString(time));
                if (time <= 0) {
                    std::cout<<"can respawn"<<std::endl;
                    button->setEventContextActivated(true);
                }
            }
Mais le pire c'est après :
-Le serveur reçois l'état du personnage. (en vie)
-Le serveur envoie le message au client. (en vie)
-Le client reçois le message du serveur. (en vie)
Mais comme il n'est plus mort du coup il ne rentre plus dans le else, de ce fait, time ne vaut jamais 0 et la fenêtre de résurrection du personnage reste bloquée, l'application se bloque.
Pour régler ce problème j'ai décidé de faire ceci :
-Le serveur envoie l'état du personnage (mort) et le temps du client. (Je fais une synchronisation du temps)
-Le client remet à jour l'état du personnage (en vie) et stocke le temps dans une variable.
-Le client reçois le message du serveur mais comme le serveur à envoyé le message avant que le client ne remette à jour l'état du personnage, je ne fais pas de mise à jour donc l'état du personnage devrait rester en vie cependant, même en comparent les deux temps. (En milliseconds)
Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
if (last_cli_time >= caracter->getAttribute("isAlive").getValue<sf::Int64>()) {
    if (caracter->isAlive() != isAlive && caracter->getType() == "E_HERO")
        std::cout<<"life and time : "<<caracter->isAlive()<<" "<<last_cli_time<<" "<<getClock("TimeClock").getElapsedTime().asMicroseconds()<<std::endl;
        caracter->setAlive(isAlive);
}
Il rentre quand même dans le if malgré que last_cli_time (le temps ou le serveur envoie l'état du personnage) est plus petit que caracter->getAttribute("isAlive").getValue<sf::Int64>() (le temps ou le client met à jour l'état du personnage.

J'ai imprimé les valeurs et last_cli_time vaut 202630566 et l'autre temps 202818486.
Pourtant 202630566 est bien plus petit que 202818486 mais malgré ça il rentre quand même dans le if vu qu'il m'affiche les temps ...