FONCTIONNEMENT BUG / QU'ON RETROUVE SUR LE SERVEUR :
Actuellement ces cadavres squelettes restent indéfiniment (3 jours max sans doute mais je n'ai pas pu le vérifier, en tout cas mini 48h))
COMMENT CA DEVRAIT FONCTIONNER :
- D'après le code source de mangos, ces squelettes devraient depop au bout d'une heure précisément.
COMMENTAIRES :
- Je pense que tout le monde a remarqué le surnombre de squelettes qu'on trouve un peu partout sur le sol dans les zones de pex et surtout aux cimetières près des raids surtout lorsque l'uptime du serveur est long.
- De plus un nombre trop important (300 max affichable si je me rappelle bien de mes tests) de ces cadavres squelette (ou de n'importe quel gameobject) provoque un freeze de chargement sur le client jusqu'à qu'il y en ai moins de pop, on a pu le constater lors des events qu'on a fait par le passé ou sur la place d'IF quand il y a beaucoup de PVP.
Je te remet ce que je t'ai dis sur skype :
Dans le code source il y a
bool Corpse::IsExpired(time_t t) const
{
if (m_type == CORPSE_BONES)
return m_time < t - 60 * MINUTE;
else
return m_time < t - 3 * DAY;
}
Mon hypothèse est que peu importe la type de cadavre, ça va toujours aller dans le ELSE, sans doute parce que m_type n'est pas correctement initié, enfin j'en sais rien en tout cas, les CORPSE_BONES devraient depop sous 60 minutes comme tu le vois dans ce code, et ils ne le font pas.
enum CorpseType
{
CORPSE_BONES = 0,
CORPSE_RESURRECTABLE_PVE = 1,
CORPSE_RESURRECTABLE_PVP = 2
};
CORPSE_BONES correspond bien au squelette laissé au sol lorsqu'un joueur revient à la vie, j'en suis sûr étant donné que les deux autres CorpseType sont insérés dans la DB (1 et 2) et correspondent aux cadavres des joueurs actuellement encore en fantôme. le fait de les stocker dans la db permet à mangos de les recharger si il y a un crash, sinon le joueur en ghost n'a plus de cadavre et ne plus rez ailleurs qu'a l'ange si ça a crash entre temps.
Et comme tu le vois le type 0 correspond à CORPSE_BONES et n'est pas stocké dans la db, donc il est dans la charge, la preuve en est que si le serveur reboot, il n'y aura plus aucun squelettes au sol.
Dans le code source il y a
bool Corpse::IsExpired(time_t t) const
{
if (m_type == CORPSE_BONES)
return m_time < t - 60 * MINUTE;
else
return m_time < t - 3 * DAY;
}
Mon hypothèse est que peu importe la type de cadavre, ça va toujours aller dans le ELSE, sans doute parce que m_type n'est pas correctement initié, enfin j'en sais rien en tout cas, les CORPSE_BONES devraient depop sous 60 minutes comme tu le vois dans ce code, et ils ne le font pas.
enum CorpseType
{
CORPSE_BONES = 0,
CORPSE_RESURRECTABLE_PVE = 1,
CORPSE_RESURRECTABLE_PVP = 2
};
CORPSE_BONES correspond bien au squelette laissé au sol lorsqu'un joueur revient à la vie, j'en suis sûr étant donné que les deux autres CorpseType sont insérés dans la DB (1 et 2) et correspondent aux cadavres des joueurs actuellement encore en fantôme. le fait de les stocker dans la db permet à mangos de les recharger si il y a un crash, sinon le joueur en ghost n'a plus de cadavre et ne plus rez ailleurs qu'a l'ange si ça a crash entre temps.
Et comme tu le vois le type 0 correspond à CORPSE_BONES et n'est pas stocké dans la db, donc il est dans la charge, la preuve en est que si le serveur reboot, il n'y aura plus aucun squelettes au sol.
