Jump to content

Trade with 3x inventory


Recommended Posts

Helllo , im having a problem recently , when someone has 1 free pos in his inventory and another players trade with his 2 items , the first item just get received by the first player and the other item rest in the other player's inventory 

 

my exchange.cpp : 

 

bool CExchange::CheckSpace()
{
	static CGrid s_grid1(5, INVENTORY_MAX_NUM/5 / 2); // inven page 1
	static CGrid s_grid2(5, INVENTORY_MAX_NUM/5 / 2); // inven page 2
	static CGrid s_grid3(5, INVENTORY_MAX_NUM/5 / 2); // inven page 3

	s_grid1.Clear();
	s_grid2.Clear();
	s_grid3.Clear();

	LPCHARACTER	victim = GetCompany()->GetOwner();
	LPITEM item;

	int i;
 
	for (i = 0; i < INVENTORY_MAX_NUM / 3; ++i)
	{
		if (!(item = victim->GetInventoryItem(i)))
		continue;

		s_grid1.Put(i, 1, item->GetSize());
	}
	for (i = INVENTORY_MAX_NUM / 3; i < (INVENTORY_MAX_NUM / 3) * 2; ++i)
	{
		if (!(item = victim->GetInventoryItem(i)))
		continue;

		s_grid2.Put(i - INVENTORY_MAX_NUM / 3, 1, item->GetSize());
	}
	for (i = (INVENTORY_MAX_NUM / 3) * 2; i < (INVENTORY_MAX_NUM /3) * 3; ++i)
	{
		if (!(item = victim->GetInventoryItem(i)))
		continue;

		s_grid3.Put(i - (INVENTORY_MAX_NUM / 3) * 2, 1, item->GetSize());
	}
	for (i = (INVENTORY_MAX_NUM / 3) * 3; i < (INVENTORY_MAX_NUM / 3) * 4; ++i)
	{
		if (!(item = victim->GetInventoryItem(i)))
		continue;
	}

	// 아... 뭔가 개병신 같지만... 용혼석 인벤을 노멀 인벤 보고 따라 만든 내 잘못이다 ㅠㅠ
	static std::vector <WORD> s_vDSGrid(DRAGON_SOUL_INVENTORY_MAX_NUM);
	
	// 일단 용혼석을 교환하지 않을 가능성이 크므로, 용혼석 인벤 복사는 용혼석이 있을 때 하도록 한다.
	bool bDSInitialized = false;
	
	for (i = 0; i < EXCHANGE_ITEM_MAX_NUM; ++i)
	{
		if (!(item = m_apItems[i]))
			continue;

		if (item->IsDragonSoul())
		{
			if (!victim->DragonSoul_IsQualified())
			{
				return false;
			}

			if (!bDSInitialized)
			{
				bDSInitialized = true;
				victim->CopyDragonSoulItemGrid(s_vDSGrid);
			}

			bool bExistEmptySpace = false;
			WORD wBasePos = DSManager::instance().GetBasePosition(item);
			if (wBasePos >= DRAGON_SOUL_INVENTORY_MAX_NUM)
				return false;
			
			for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; i++)
			{
				WORD wPos = wBasePos + i;
				if (0 == s_vDSGrid[wBasePos])
				{
					bool bEmpty = true;
					for (int j = 1; j < item->GetSize(); j++)
					{
						if (s_vDSGrid[wPos + j * DRAGON_SOUL_BOX_COLUMN_NUM])
						{
							bEmpty = false;
							break;
						}
					}
					if (bEmpty)
					{
						for (int j = 0; j < item->GetSize(); j++)
						{
							s_vDSGrid[wPos + j * DRAGON_SOUL_BOX_COLUMN_NUM] =  wPos + 1;
						}
						bExistEmptySpace = true;
						break;
					}
				}
				if (bExistEmptySpace)
					break;
			}
			if (!bExistEmptySpace)
				return false;
		}
		else
		{
			int iPos = s_grid1.FindBlank(1, item->GetSize());

			if (iPos >= 0)
			{
				s_grid1.Put(iPos, 1, item->GetSize());
			}
			else
			{
				iPos = s_grid2.FindBlank(1, item->GetSize());

				if (iPos >= 0)
				{
					s_grid2.Put(iPos, 1, item->GetSize());
				}
				else
				{
					iPos = s_grid3.FindBlank(1, item->GetSize());

					if (iPos >= 0)
					{
						s_grid3.Put(iPos, 1, item->GetSize());
					}
					else
					{
					return false;
					}
				}
			}
		}
	}

	return true;
}

thank you

Edited by PeaceMaker
Link to comment
Share on other sites

  • Replies 4
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

Announcements



×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.