Advertisement
Guest User

Untitled

a guest
Apr 21st, 2022
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.23 KB | None | 0 0
  1. bool CExchange::CheckSpace()
  2. {
  3.     const static INVENTORY_PAGE_COUNT = 4;
  4.     const static INVENTORY_PAGE_SIZE = 45;
  5.    
  6.     static std::vector<CGrid*> s_grids;
  7.     s_grids.resize(INVENTORY_PAGE_COUNT);
  8.  
  9.     for (int i = 0; i < INVENTORY_PAGE_COUNT; ++i)
  10.     {
  11.         s_grids[i] = new CGrid(5, 9);
  12.     }
  13.  
  14.     LPCHARACTER victim = GetCompany()->GetOwner();
  15.     LPITEM item;
  16.  
  17.     int i;
  18.  
  19.     for (i = 0; i < INVENTORY_MAX_NUM; ++i) {
  20.         if (!(item = victim->GetInventoryItem(i)))
  21.             continue;
  22.  
  23.         BYTE itemSize = item->GetSize();
  24.         BYTE bPage = i / (INVENTORY_PAGE_SIZE)-1;
  25.  
  26.         s_grids[bPage]->Put(i - (INVENTORY_PAGE_SIZE * bPage), 1, itemSize);
  27.     }
  28.  
  29.     static std::vector <WORD> s_vDSGrid(DRAGON_SOUL_INVENTORY_MAX_NUM);
  30.  
  31.     bool bDSInitialized = false;
  32.  
  33.     for (i = 0; i < EXCHANGE_ITEM_MAX_NUM; ++i)
  34.     {
  35.         if (!(item = m_apItems[i]))
  36.             continue;
  37.  
  38.         BYTE itemSize = item->GetSize();
  39.  
  40.         if (item->IsDragonSoul())
  41.         {
  42.             if (!victim->DragonSoul_IsQualified())
  43.                 return false;
  44.  
  45.             if (!bDSInitialized) {
  46.                 bDSInitialized = true;
  47.                 victim->CopyDragonSoulItemGrid(s_vDSGrid);
  48.             }
  49.  
  50.             bool bExistEmptySpace = false;
  51.             WORD wBasePos = DSManager::instance().GetBasePosition(item);
  52.             if (wBasePos >= DRAGON_SOUL_INVENTORY_MAX_NUM)
  53.                 return false;
  54.  
  55.             for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; i++)
  56.             {
  57.                 WORD wPos = wBasePos + i;
  58.                 if (0 == s_vDSGrid[wBasePos])
  59.                 {
  60.                     bool bEmpty = true;
  61.                     for (int j = 1; j < item->GetSize(); j++)
  62.                     {
  63.                         if (s_vDSGrid[wPos + j * DRAGON_SOUL_BOX_COLUMN_NUM])
  64.                         {
  65.                             bEmpty = false;
  66.                             break;
  67.                         }
  68.                     }
  69.                     if (bEmpty)
  70.                     {
  71.                         for (int j = 0; j < item->GetSize(); j++)
  72.                         {
  73.                             s_vDSGrid[wPos + j * DRAGON_SOUL_BOX_COLUMN_NUM] = wPos + 1;
  74.                         }
  75.                         bExistEmptySpace = true;
  76.                         break;
  77.                     }
  78.                 }
  79.                 if (bExistEmptySpace)
  80.                     break;
  81.             }
  82.             if (!bExistEmptySpace)
  83.                 return false;
  84.         }
  85.         else
  86.         {
  87.             bool bFound = false;
  88.             for (int j = 0; j < INVENTORY_PAGE_COUNT; ++j)
  89.             {
  90.                 int iPos = s_grids[j]->FindBlank(1, itemSize);
  91.                 if (iPos >= 0) {
  92.                     s_grids[j]->Put(iPos, 1, itemSize);
  93.                     bFound = true;
  94.                     break;
  95.                 }
  96.             }
  97.             if (bFound)
  98.                 continue;
  99.  
  100.             return false;  // No space left in inventory
  101.         }
  102.     }
  103.  
  104.     return true;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement