Hello
I have a few problems with the item swap system.
1. He moves badly.
2. It transfers 2 items.
3. Red Color when moving.
4. Fake animation.
5. The fish enter the fishing rod.
#ifndef __SWAPITEM_SYSTEM__
return false;
#else
{
if (Cell.IsEquipPosition() || DestCell.IsEquipPosition())
return false;
if (item->GetType() == ITEM_ARMOR or item->GetType() == ITEM_WEAPON or item->GetType() == ITEM_COSTUME)
{
LPITEM itemSrc = GetInventoryItem(Cell.cell);
LPITEM itemDest = GetInventoryItem(DestCell.cell);
if (itemSrc == NULL || itemDest == NULL)
return false;
int itemSrcSize = itemSrc->GetSize();
int itemDestSize = itemDest->GetSize();
if (GetExchange() || GetMyShop() || GetShopOwner() || IsOpenSafebox() || IsCubeOpen() || IsAcceOpen())
return false;
#ifdef __OFFLINE_SHOP_SYSTEM__
if (GetOfflineShop())
return false;
#endif
#ifdef __ATTR_TRANSFER_SYSTEM__
if (IsAttrTransferOpen())
return false;
#endif
if (itemSrc->isLocked() || itemDest->isLocked())
return false;
else if (itemDestSize > itemSrcSize)
return false;
else if (itemSrcSize == itemDestSize)
{
itemSrc->RemoveFromCharacter();
itemDest->RemoveFromCharacter();
SetItem(Cell, itemDest);
SetItem(DestCell, itemSrc);
}
else if (itemSrcSize > itemDestSize)
{
#ifdef __4_INVENTORY_PAGES__
if (itemDestSize == 1 && itemDest->GetCell() >= 40 && itemDest->GetCell() < 45 || itemDestSize == 1 && itemDest->GetCell() >= 85 && itemDest->GetCell() < 90 || itemDestSize == 1 && itemDest->GetCell() >= 130 && itemDest->GetCell() < 135 || itemDestSize == 1 && itemDest->GetCell() >= 175 && itemDest->GetCell() < 180)
#else
if (itemDestSize == 1 && itemDest->GetCell() >= 40 && itemDest->GetCell() < 45 || itemDestSize == 1 && itemDest->GetCell() >= 85 && itemDest->GetCell() < 90)
#endif
return false;
#ifdef __4_INVENTORY_PAGES__
if (itemDestSize == 1 && itemSrcSize == 3 && itemDest->GetCell() >= 35 && itemDest->GetCell() < 40 || itemDestSize == 1 && itemSrcSize == 3 && itemDest->GetCell() >= 80 && itemDest->GetCell() < 85 || itemDestSize == 1 && itemSrcSize == 3 && itemDest->GetCell() >= 125 && itemDest->GetCell() < 130 || itemDestSize == 1 && itemSrcSize == 3 && itemDest->GetCell() >= 170 && itemDest->GetCell() < 175)
#else
if (itemDestSize == 1 && itemSrcSize == 3 && itemDest->GetCell() >= 35 && itemDest->GetCell() < 40 || itemDestSize == 1 && itemSrcSize == 3 && itemDest->GetCell() >= 80 && itemDest->GetCell() < 85)
#endif
return false;
#ifdef __4_INVENTORY_PAGES__
if (itemDestSize == 2 && itemSrcSize == 3 && itemDest->GetCell() >= 35 && itemDest->GetCell() < 40 || itemDestSize == 2 && itemSrcSize == 3 && itemDest->GetCell() >= 80 && itemDest->GetCell() < 85 || itemDestSize == 2 && itemSrcSize == 3 && itemDest->GetCell() >= 125 && itemDest->GetCell() < 130 || itemDestSize == 2 && itemSrcSize == 3 && itemDest->GetCell() >= 170 && itemDest->GetCell() < 175)
#else
if (itemDestSize == 2 && itemSrcSize == 3 && itemDest->GetCell() >= 35 && itemDest->GetCell() < 40 || itemDestSize == 2 && itemSrcSize == 3 && itemDest->GetCell() >= 80 && itemDest->GetCell() < 85)
#endif
return false;
bool move_ = SwapItem(item->GetCell(), item2->GetCell());
if (!move_)
return false;
BYTE bCell = Cell.cell;
BYTE bDestCell = DestCell.cell;
if (itemSrcSize == 2 && itemDestSize == 1)
{
bCell = bCell + 5;
bDestCell = bDestCell + 5;
LPITEM itemCheck = GetInventoryItem(bDestCell);
if (itemCheck != NULL)
{
if (itemCheck->GetSize() != 1 || itemCheck->isLocked())
{
SwapItem(item2->GetCell(), item->GetCell());
return false;
}
itemCheck->RemoveFromCharacter();
SetItem(TItemPos(INVENTORY, bCell), itemCheck);
}
}
else if (itemSrcSize == 3)
{
if (itemDestSize == 2)
{
bCell = bCell + 10;
bDestCell = bDestCell + 10;
LPITEM itemCheck = GetInventoryItem(bDestCell);
if (itemCheck != NULL)
{
if (itemCheck->GetSize() != 1 || itemCheck->isLocked())
{
SwapItem(item2->GetCell(), item->GetCell());
return false;
}
itemCheck->RemoveFromCharacter();
SetItem(TItemPos(INVENTORY, bCell), itemCheck);
}
}
else
{
bCell = bCell + 5;
bDestCell = bDestCell + 5;
LPITEM itemCheck = GetInventoryItem(bDestCell);
if (itemCheck == NULL)
{
bCell = bCell + 5;
bDestCell = bDestCell + 5;
LPITEM itemCheckTwo = GetInventoryItem(bDestCell);
if (itemCheckTwo != NULL)
{
if (itemCheckTwo->GetSize() != 1 || itemCheckTwo->isLocked())
{
SwapItem(item2->GetCell(), item->GetCell());
return false;
}
itemCheckTwo->RemoveFromCharacter();
SetItem(TItemPos(INVENTORY, bCell), itemCheckTwo);
}
}
else
{
if (itemCheck->GetSize() == 3 || itemCheck->isLocked())
{
SwapItem(item2->GetCell(), item->GetCell());
return false;
}
if (itemCheck->GetSize() == 1)
{
bCell = bCell + 5;
bDestCell = bDestCell + 5;
BYTE bCellOld = bCell - 5;
LPITEM itemCheckThree = GetInventoryItem(bDestCell);
if (itemCheckThree != NULL)
{
if (itemCheckThree->GetSize() != 1 || itemCheckThree->isLocked())
{
SwapItem(item2->GetCell(), item->GetCell());
return false;
}
itemCheck->RemoveFromCharacter();
SetItem(TItemPos(INVENTORY, bCellOld), itemCheck);
itemCheckThree->RemoveFromCharacter();
SetItem(TItemPos(INVENTORY, bCell), itemCheckThree);
}
else
{
itemCheck->RemoveFromCharacter();
SetItem(TItemPos(INVENTORY, bCellOld), itemCheck);
}
}
else
{
itemCheck->RemoveFromCharacter();
SetItem(TItemPos(INVENTORY, bCell), itemCheck);
}
}
}
}
else
{
return false;
}
}
else
{
return false;
}
}
else
{
return false;
}
}
#endif
I'm sorry for my poor English.