Confusión por reutilización de IDs de entidad Entity ID reused without a generation counter
ID de la causa pt-id-reuse · Responsable principal Desarrollo de servidor (Equipo de desarrollo) · También Desarrollo de cliente (Equipo de desarrollo)
Si el servidor reutiliza el mismo ID de entidad cuando reaparece un NPC muerto, un cliente que se perdió el mensaje de desaparición en ese intervalo confunde el NPC nuevo con el antiguo.
Por qué Un NPC muere y reaparece con el mismo ID de entidad → Efecto El cliente que se perdió el mensaje de desaparición ignora el mensaje de aparición porque “ya conoce esa entidad”, o la deja en estado de muerta → En pantalla En una sola pantalla el NPC falta o se ve caído en el suelo, y a veces se ve con el aspecto de otro NPC
De vez en cuando, al azar, Cuando se junta mucha gente
Responsable
Responsable principal Desarrollo de servidor (Equipo de desarrollo) · También Desarrollo de cliente (Equipo de desarrollo)
Tareas (Equipo de desarrollo)
Servidor: añadir un número de generación al ID de entidad para distinguir las reutilizaciones. Cliente: al recibir un mensaje de aparición con un ID conocido, borrar la entidad existente y crearla de nuevo.
En el gráfico
Picos aleatorios · Mensajes de aparición con un ID ya conocido
Dónde mirar
Registrar en el servidor la hora de creación y de borrado de cada ID de entidad (con el número de generación, si existe), y contar las veces que el cliente recibió mensajes de aparición con un ID que ya conocía y los borrados y recreaciones que la actualización de visibilidad trató como “sin cambios”
Se confirma si
El NPC que no se ve o se ve caído tiene el mismo ID que un NPC que acababa de morir, y en ese intervalo ese cliente no recibió el mensaje de desaparición, o el servidor no envió ni el de desaparición ni el de aparición
Se descarta si
Si los ID llevan número de generación y también se usa en las comparaciones, no es esta causa. Si no se ve aunque el ID no sea reutilizado, apunta a la pérdida del mensaje de aparición
Se verifica con
Requiere logs y métricas del servidor o el cliente del juego
Para saber más
También ocurre en el lado del servidor. Si la lista de entidades visibles se compara solo por ID, un NPC que murió y reapareció con el mismo ID entre dos actualizaciones de visibilidad se toma como “sin cambios”, y no se envía ni el mensaje de desaparición ni el de aparición. Si cada jugador actualiza la visibilidad en un momento distinto, solo lo sufren los clientes que coinciden con ese instante.
Fuentes
Entity struct (Entities 1.3)Unity Una Entity se compone de un Index y un número de generación (Version), con lo que se distingue si un Index reutilizado sigue siendo válido