PeaceMaker 121 Posted August 11, 2015 Share Posted August 11, 2015 (edited) 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 August 11, 2015 by PeaceMaker Link to comment Share on other sites More sharing options...
PeaceMaker 121 Posted August 12, 2015 Author Share Posted August 12, 2015 anyone would help me please ? Link to comment Share on other sites More sharing options...
PeaceMaker 121 Posted August 12, 2015 Author Share Posted August 12, 2015 . Link to comment Share on other sites More sharing options...
metin2team 757 Posted August 12, 2015 Share Posted August 12, 2015 s_grid1(5, INVENTORY_MAX_NUM/5 / 2); to s_grid1(5, INVENTORY_MAX_NUM/5 / 3); Link to comment Share on other sites More sharing options...
Think 117 Posted August 12, 2015 Share Posted August 12, 2015 You can use this one and modify it for your needs: Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now