mirror of
https://github.com/luanti-org/luanti.git
synced 2025-10-12 16:15:20 +02: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:
@@ -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; }
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user