update new many items from 7.81. Also fix issue with runes charges to not stack and not throw client debug.

This commit is contained in:
ErikasKontenis
2019-11-16 00:30:27 +02:00
parent 5640c1497d
commit 6a0e161bef
6 changed files with 1553 additions and 102 deletions

View File

@@ -1018,11 +1018,11 @@ void Game::playerMoveItem(Player* player, const Position& fromPos,
}
}
ReturnValue ret = internalMoveItem(fromCylinder, toCylinder, toIndex, item, count, nullptr, 0, player);
ReturnValue ret = internalMoveItem(fromCylinder, toCylinder, toIndex, item, item->isRune() ? item->getItemCount() : count, nullptr, 0, player);
if (ret != RETURNVALUE_NOERROR) {
player->sendCancelMessage(ret);
} else {
g_events->eventPlayerOnItemMoved(player, item, count, fromPos, toPos, fromCylinder, toCylinder);
g_events->eventPlayerOnItemMoved(player, item, item->isRune() ? item->getItemCount() : count, fromPos, toPos, fromCylinder, toCylinder);
}
}
@@ -1096,8 +1096,14 @@ ReturnValue Game::internalMoveItem(Cylinder* fromCylinder, Cylinder* toCylinder,
uint32_t m;
if (item->isStackable()) {
m = std::min<uint32_t>(count, maxQueryCount);
} else {
if (item->isRune()) {
m = std::min<uint32_t>(item->getItemCount(), maxQueryCount);
}
else {
m = std::min<uint32_t>(count, maxQueryCount);
}
}
else {
m = maxQueryCount;
}
@@ -1133,11 +1139,12 @@ ReturnValue Game::internalMoveItem(Cylinder* fromCylinder, Cylinder* toCylinder,
if (item->isStackable()) {
uint32_t n;
if (item->equals(toItem)) {
if (!item->isRune() && item->equals(toItem)) {
n = std::min<uint32_t>(100 - toItem->getItemCount(), m);
toCylinder->updateThing(toItem, toItem->getID(), toItem->getItemCount() + n);
updateItem = toItem;
} else {
}
else {
n = 0;
}
@@ -1232,7 +1239,7 @@ ReturnValue Game::internalAddItem(Cylinder* toCylinder, Item* item, int32_t inde
return RETURNVALUE_NOERROR;
}
if (item->isStackable() && item->equals(toItem)) {
if (item->isStackable() && !item->isRune() && item->equals(toItem)) {
uint32_t m = std::min<uint32_t>(item->getItemCount(), maxQueryCount);
uint32_t n = std::min<uint32_t>(100 - toItem->getItemCount(), m);
@@ -1247,7 +1254,8 @@ ReturnValue Game::internalAddItem(Cylinder* toCylinder, Item* item, int32_t inde
ReleaseItem(remainderItem);
remainderCount = count;
}
} else {
}
else {
toCylinder->addThing(index, item);
int32_t itemIndex = toCylinder->getThingIndex(item);
@@ -1255,7 +1263,8 @@ ReturnValue Game::internalAddItem(Cylinder* toCylinder, Item* item, int32_t inde
toCylinder->postAddNotification(item, nullptr, itemIndex);
}
}
} else {
}
else {
//fully merged with toItem, item will be destroyed
item->onRemoved();
ReleaseItem(item);
@@ -1265,7 +1274,8 @@ ReturnValue Game::internalAddItem(Cylinder* toCylinder, Item* item, int32_t inde
toCylinder->postAddNotification(toItem, nullptr, itemIndex);
}
}
} else {
}
else {
toCylinder->addThing(index, item);
int32_t itemIndex = toCylinder->getThingIndex(item);