1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-09-30 19:22:14 +00:00

Server: Fix Server::Send exception caused by leaving players

Leaving players will have PEER_ID_INVALID for database saving purposes.
This patch clarifies that, and properly protects the batch send function.

Bug introduced by 5f5ea132.
This commit is contained in:
SmallJoker 2025-09-29 19:23:40 +02:00
parent 274d8a7c65
commit 499f2284bd
3 changed files with 5 additions and 2 deletions

View file

@ -123,7 +123,8 @@ public:
bool inventory_formspec_overridden = false;
/// returns PEER_ID_INEXISTENT when PlayerSAO is not ready
/// returns PEER_ID_INEXISTENT when PlayerSAO is either
/// not yet present or about to be removed (e.g. leave).
session_t getPeerId() const { return m_peer_id; }
void setPeerId(session_t peer_id) { m_peer_id = peer_id; }

View file

@ -1618,7 +1618,7 @@ void Server::SendSpawnParticles(RemotePlayer *player,
const float radius_sq = radius * radius;
PlayerSAO *sao = player->getPlayerSAO();
if (!sao)
if (!sao || sao->isGone())
return;
std::ostringstream particle_batch_data(std::ios_base::binary);

View file

@ -50,6 +50,8 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, RemotePlayer *player_, session_t p
m_armor_groups["immortal"] = 1;
}
// PlayerSAO::~PlayerSAO(): eventually deleted by `ActiveObjectMgr::removeObject`
void PlayerSAO::finalize(RemotePlayer *player, const std::set<std::string> &privs)
{
assert(player);