Code: Select all
2017-01-22 07:50:02: ERROR[Server]: ServerEnv: Trying to store id=2863 statically but block (-61,-2,-56) already contains 90 objects. Forcing delete.
2017-01-22 07:50:02: ERROR[Server]: ServerEnv: Trying to store id=2864 statically but block (-61,-2,-56) already contains 90 objects. Forcing delete.
2017-01-22 07:50:02: ERROR[Server]: ServerEnv: Trying to store id=2865 statically but block (-61,-2,-56) already contains 90 objects. Forcing delete.
2017-01-22 07:50:02: ERROR[Server]: ServerEnv: Trying to store id=2866 statically but block (-61,-2,-56) already contains 90 objects. Forcing delete.
2017-01-22 07:50:02: ERROR[Server]: ServerEnv: Trying to store id=2867 statically but block (-61,-2,-56) already contains 90 objects. Forcing delete.
2017-01-22 07:50:02: ERROR[Server]: ServerEnv: Trying to store id=2868 statically but block (-61,-2,-56) already contains 90 objects. Forcing delete.
2017-01-22 07:50:02: ERROR[Server]: ServerEnv: Trying to store id=2869 statically but block (-61,-2,-56) already contains 90 objects. Forcing delete.
2017-01-22 07:50:02: ERROR[Server]: ServerEnv: Trying to store id=2870 statically but block (-61,-2,-56) already contains 90 objects. Forcing delete.
2017-01-22 07:50:02: ERROR[Server]: Server::ProcessData(): Canceling: No player for peer_id=2954 disconnecting peer!
2017-01-22 07:50:02: ERROR[Server]: Server::ProcessData(): Canceling: No player for peer_id=2789 disconnecting peer!
2017-01-22 07:50:02: ERROR[Server]: Server::ProcessData(): Canceling: No player for peer_id=2947 disconnecting peer!
Code: Select all
if( obj->getType() == ACTIVEOBJECT_TYPE_PLAYER )
{
warningstream << "Attempting to delete Player SAO id=" << obj->getId( ) << " from block " << PP(blockpos_o) << std::endl;
}
else if( m_active_blocks.contains(blockpos_o) )
{
warningstream << "Attempting to delete object id=" << obj->getId( ) << " from active block " << PP(blockpos_o) << std::endl;
}
Code: Select all
2017-01-22 18:00:33: ACTION[Server]: sorcerykid leaves game. List of players: publicworks, parkdistrict
2017-01-22 18:00:33: ERROR[Server]: ServerEnv: Trying to store id=15 statically but block (-1,0,0) already contains 5 objects. Forcing delete.
2017-01-22 18:00:33: ERROR[Server]: ServerEnv: Trying to store id=17 statically but block (-1,0,0) already contains 5 objects. Forcing delete.
2017-01-22 18:00:33: ERROR[Server]: ServerEnv: Trying to store id=18 statically but block (-1,0,0) already contains 5 objects. Forcing delete.
2017-01-22 18:00:33: WARNING[Server]: Attempting to delete Player SAO id=19 from block (-4,0,1)
2017-01-22 18:00:33: WARNING[Server]: Attempting to delete object id=20 from active block (-4,0,1)
2017-01-22 18:00:33: WARNING[Server]: Attempting to delete object id=21 from active block (-4,0,1)
The issue is complicated by several factors. First and foremost, once force_delete is set, then every object is queued for deletion even if the associated map block is still active. This is due to a flaw in the following conditional
Code: Select all
// If block is active, don't remove
if(!force_delete && m_active_blocks.contains(blockpos_o))
continue;
Secondly, even after obj->isStaticAllowed() is validated, the object can still be deleted regardless of whether it is static object or not. Perhaps this is intentional? I'm not sure. But in the very least, it would be prudent to short circuit whenever encountering a Player SAO. This should afford a reasonable sanity check, I would think:
Code: Select all
// Ignore active map blocks and ignore PlayerSAOs
if(m_active_blocks.contains(blockpos_o) || obj->getType() == ACTIVEOBJECT_TYPE_PLAYER)
continue;
I hope that an appropriate patch can be made available very soon. In the meantime, the workaround proposed above should suffice.