MoveItemSomewhere double bugfix
-> Fix bug where MoveSomewhere from an infinite source would fill the destination inventory with copies of itself. -> Fix bug where MoveSomewhere would needlessly call callbacks. -> Remove trailing whitespaces
This commit is contained in:
parent
4046f3e302
commit
7bbb9b066a
@ -380,6 +380,10 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
|
||||
|
||||
// If source is infinite, reset it's stack
|
||||
if (src_can_take_count == -1) {
|
||||
// For the caused_by_move_somewhere == true case we didn't force-put the item,
|
||||
// which guarantees there is no leftover, and code below would duplicate the
|
||||
// (not replaced) to_stack_was item.
|
||||
if (!caused_by_move_somewhere) {
|
||||
// If destination stack is of different type and there are leftover
|
||||
// items, attempt to put the leftover items to a different place in the
|
||||
// destination inventory.
|
||||
@ -392,9 +396,12 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (move_count > 0) {
|
||||
list_from->deleteItem(from_i);
|
||||
list_from->addItem(from_i, from_stack_was);
|
||||
}
|
||||
}
|
||||
// If destination is infinite, reset it's stack and take count from source
|
||||
if(dst_can_put_count == -1){
|
||||
list_to->deleteItem(to_i);
|
||||
@ -416,6 +423,13 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
|
||||
<< " i=" << to_i
|
||||
<< std::endl;
|
||||
|
||||
// If we are inside the move somewhere loop, we don't need to report
|
||||
// anything if nothing happened (perhaps we don't need to report
|
||||
// anything for caused_by_move_somewhere == true, but this way its safer)
|
||||
if (caused_by_move_somewhere && move_count == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
Record rollback information
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user