@ -302,29 +302,23 @@ void RespawnDeadItem(Item &&itm, Point target)
NetSendCmdPItem ( false , CMD_SPAWNITEM , target , Items [ ii ] ) ;
NetSendCmdPItem ( false , CMD_SPAWNITEM , target , Items [ ii ] ) ;
}
}
void DeadItem ( Player & player , Item & & itm , Displacement direction )
void DeadItem ( Player & player , Item & & ite m , Displacement direction )
{
{
if ( itm . isEmpty ( ) )
if ( ite m . isEmpty ( ) )
return ;
return ;
const Point playerTile = player . position . tile ;
const Point playerTile = player . position . tile ;
const Point target = playerTile + direction ;
if ( direction ! = Displacement { 0 , 0 } ) {
const Point target = playerTile + direction ;
if ( direction ! = Displacement { 0 , 0 } & & ItemSpaceOk ( target ) ) {
if ( ItemSpaceOk ( target ) ) {
RespawnDeadItem ( std : : move ( itm ) , target ) ;
RespawnDeadItem ( std : : move ( item ) , target ) ;
return ;
return ;
}
}
}
for ( int k = 1 ; k < 50 ; k + + ) {
std : : optional < Point > dropPoint = FindClosestValidPosition ( ItemSpaceOk , playerTile , 1 , 50 ) ;
for ( int j = - k ; j < = k ; j + + ) {
if ( dropPoint ) {
for ( int i = - k ; i < = k ; i + + ) {
RespawnDeadItem ( std : : move ( item ) , * dropPoint ) ;
Point next = playerTile + Displacement { i , j } ;
if ( ItemSpaceOk ( next ) ) {
RespawnDeadItem ( std : : move ( itm ) , next ) ;
return ;
}
}
}
}
}
}
}