Inventory Item move bug #2

Open
opened 2025-11-28 14:26:45 +00:00 by shadow · 0 comments

You cannot move items 1 cell down/up in page 2/3/4 of inventory , you can only move 1 cell down in 1st inventory page but not up

To fix :

PythonGridSlotWindow.cpp

Search this :

DWORD dwSlotNumber = UI::CWindowManager::Instance().GetAttachingSlotNumber();

Add under :

		if (dwSlotNumber > 44)
		{
			if (dwSlotNumber < 90)
			{
				dwSlotNumber -= 45;
			}
			else if(dwSlotNumber < 135)
			{
				dwSlotNumber -= 90;
			}
			else if (dwSlotNumber < 180)
			{
				dwSlotNumber -= 135;
			}
		}

Search this :

BOOL CGridSlotWindow::GetPickedSlotPointer(TSlot ** ppSlot)

And compare :

BOOL CGridSlotWindow::GetPickedSlotPointer(TSlot ** ppSlot)
{
	if (!UI::CWindowManager::Instance().IsAttaching())
		return CSlotWindow::GetPickedSlotPointer(ppSlot);

	BYTE byWidth, byHeight;
	UI::CWindowManager::Instance().GetAttachingIconSize(&byWidth, &byHeight);

	std::list<TSlot*> SlotList;
	if (!GetPickedSlotList(byWidth, byHeight, &SlotList))
		return FALSE;

	TSlot * pMinSlot = NULL;
	//DWORD dwSlotNumber = UI::CWindowManager::Instance().GetAttachingSlotNumber();
	//DWORD dwAttachingItemIndex = UI::CWindowManager::Instance().GetAttachingIndex();

	for (std::list<TSlot*>::iterator itor = SlotList.begin(); itor != SlotList.end(); ++itor)
	{
		TSlot * pSlot = *itor;

		if (!pMinSlot)
		{
			pMinSlot = pSlot;
		}
		else
		{
			if (pSlot->dwSlotNumber < pMinSlot->dwSlotNumber && pSlot->dwItemIndex != pMinSlot->dwItemIndex)
			{
				pMinSlot = pSlot;
			}
			else
			{
				if (!pMinSlot->isItem && pSlot->isItem && pSlot->dwItemIndex == pMinSlot->dwItemIndex)
				{
					pMinSlot = pSlot;
				}
			}
		}
	}

	if (!pMinSlot)
	{
		return FALSE;
	}
	else
	{
		TSlot * pCenterSlot;
		if (!GetSlotPointer(pMinSlot->dwCenterSlotNumber, &pCenterSlot))
			return FALSE;

		*ppSlot = pCenterSlot;

		// ?? ???? ?? ?? ???..
		if (UI::CWindowManager::Instance().IsAttaching())
		{
			DWORD dwSlotNumber = UI::CWindowManager::Instance().GetAttachingSlotNumber();
			if (dwSlotNumber > 44)
			{
				if (dwSlotNumber < 90)
				{
					dwSlotNumber -= 45;
				}
				else if (dwSlotNumber < 135)
				{
					dwSlotNumber -= 90;
				}
				else if (dwSlotNumber < 180)
				{
					dwSlotNumber -= 135;
				}
			}
			if (dwSlotNumber == pCenterSlot->dwSlotNumber)
			{
				*ppSlot = pMinSlot;
			}
		}
	}

	return TRUE;
}
You cannot move items 1 cell down/up in page 2/3/4 of inventory , you can only move 1 cell down in 1st inventory page but not up To fix : PythonGridSlotWindow.cpp Search this : DWORD dwSlotNumber = UI::CWindowManager::Instance().GetAttachingSlotNumber(); Add under : ``` if (dwSlotNumber > 44) { if (dwSlotNumber < 90) { dwSlotNumber -= 45; } else if(dwSlotNumber < 135) { dwSlotNumber -= 90; } else if (dwSlotNumber < 180) { dwSlotNumber -= 135; } } ``` Search this : BOOL CGridSlotWindow::GetPickedSlotPointer(TSlot ** ppSlot) And compare : ``` BOOL CGridSlotWindow::GetPickedSlotPointer(TSlot ** ppSlot) { if (!UI::CWindowManager::Instance().IsAttaching()) return CSlotWindow::GetPickedSlotPointer(ppSlot); BYTE byWidth, byHeight; UI::CWindowManager::Instance().GetAttachingIconSize(&byWidth, &byHeight); std::list<TSlot*> SlotList; if (!GetPickedSlotList(byWidth, byHeight, &SlotList)) return FALSE; TSlot * pMinSlot = NULL; //DWORD dwSlotNumber = UI::CWindowManager::Instance().GetAttachingSlotNumber(); //DWORD dwAttachingItemIndex = UI::CWindowManager::Instance().GetAttachingIndex(); for (std::list<TSlot*>::iterator itor = SlotList.begin(); itor != SlotList.end(); ++itor) { TSlot * pSlot = *itor; if (!pMinSlot) { pMinSlot = pSlot; } else { if (pSlot->dwSlotNumber < pMinSlot->dwSlotNumber && pSlot->dwItemIndex != pMinSlot->dwItemIndex) { pMinSlot = pSlot; } else { if (!pMinSlot->isItem && pSlot->isItem && pSlot->dwItemIndex == pMinSlot->dwItemIndex) { pMinSlot = pSlot; } } } } if (!pMinSlot) { return FALSE; } else { TSlot * pCenterSlot; if (!GetSlotPointer(pMinSlot->dwCenterSlotNumber, &pCenterSlot)) return FALSE; *ppSlot = pCenterSlot; // ?? ???? ?? ?? ???.. if (UI::CWindowManager::Instance().IsAttaching()) { DWORD dwSlotNumber = UI::CWindowManager::Instance().GetAttachingSlotNumber(); if (dwSlotNumber > 44) { if (dwSlotNumber < 90) { dwSlotNumber -= 45; } else if (dwSlotNumber < 135) { dwSlotNumber -= 90; } else if (dwSlotNumber < 180) { dwSlotNumber -= 135; } } if (dwSlotNumber == pCenterSlot->dwSlotNumber) { *ppSlot = pMinSlot; } } } return TRUE; } ```
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: Metin2/bug-tracker#2
There is no content yet.