aem5299

Untitled

Feb 21st, 2018
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.35 KB | None | 0 0
  1. bool CExchange::CheckSpace()
  2. {
  3.  
  4.     static CGrid s_grid1(5, INVENTORY_MAX_NUM / 5 / 4);
  5.     static CGrid s_grid2(5, INVENTORY_MAX_NUM / 5 / 4);
  6.     static CGrid s_grid3(5, INVENTORY_MAX_NUM / 5 / 4);
  7.     static CGrid s_grid4(5, INVENTORY_MAX_NUM / 5 / 4);
  8.  
  9.     s_grid1.Clear();
  10.     s_grid2.Clear();
  11.     s_grid3.Clear();
  12.     s_grid4.Clear();
  13.  
  14.     LPCHARACTER victim = GetCompany()->GetOwner();
  15.     LPITEM item;
  16.  
  17.     int i;
  18.  
  19.     for (i = 0; i < INVENTORY_MAX_NUM / 4; ++i)
  20.     {
  21.         if (!(item = victim->GetInventoryItem(i)))
  22.             continue;
  23.  
  24.         s_grid1.Put(i, 1, item->GetSize());
  25.     }
  26.     for (i = INVENTORY_MAX_NUM / 4; i < (INVENTORY_MAX_NUM / 4) * 2; ++i)
  27.     {
  28.         if (!(item = victim->GetInventoryItem(i)))
  29.             continue;
  30.  
  31.         s_grid2.Put(i - INVENTORY_MAX_NUM / 4, 1, item->GetSize());
  32.     }
  33.     for (i = (INVENTORY_MAX_NUM / 4) * 2; i < (INVENTORY_MAX_NUM / 4) * 3; ++i)
  34.     {
  35.         if (!(item = victim->GetInventoryItem(i)))
  36.             continue;
  37.  
  38.         s_grid3.Put(i - (INVENTORY_MAX_NUM / 4) * 2, 1, item->GetSize());
  39.     }
  40.     for (i = (INVENTORY_MAX_NUM / 4) * 3; i < (INVENTORY_MAX_NUM / 4) * 4; ++i)
  41.     {
  42.         if (!(item = victim->GetInventoryItem(i)))
  43.             continue;
  44.  
  45.         s_grid4.Put(i - (INVENTORY_MAX_NUM / 4) * 3, 1, item->GetSize());
  46.     }
  47.    
  48.     static std::vector <WORD> s_vDSGrid(DRAGON_SOUL_INVENTORY_MAX_NUM);
  49.     bool bDSInitialized = false;
  50.     for (i = 0; i < EXCHANGE_ITEM_MAX_NUM; ++i)
  51.     {
  52.         if (!(item = m_apItems[i]))
  53.             continue;
  54.  
  55. #ifdef NEW_ADD_INVENTORY
  56.         int envanterblack;
  57.         if (item->IsDragonSoul())
  58.             envanterblack = victim->GetEmptyDragonSoulInventory(item);
  59.         else
  60.             envanterblack = victim->GetEmptyInventory(item->GetSize());
  61.  
  62.         if (envanterblack < 0)
  63.         {
  64.             return false;
  65.         }
  66. #endif
  67.  
  68.         if (item->IsDragonSoul())
  69.         {
  70.             if (!victim->DragonSoul_IsQualified())
  71.             {
  72.                 return false;
  73.             }
  74.  
  75.             if (!bDSInitialized)
  76.             {
  77.                 bDSInitialized = true;
  78.                 victim->CopyDragonSoulItemGrid(s_vDSGrid);
  79.             }
  80.  
  81.             bool bExistEmptySpace = false;
  82.             WORD wBasePos = DSManager::instance().GetBasePosition(item);
  83.             if (wBasePos >= DRAGON_SOUL_INVENTORY_MAX_NUM)
  84.                 return false;
  85.  
  86.             for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; i++)
  87.             {
  88.                 WORD wPos = wBasePos + i;
  89.                 if (0 == s_vDSGrid[wBasePos])
  90.                 {
  91.                     bool bEmpty = true;
  92.                     for (int j = 1; j < item->GetSize(); j++)
  93.                     {
  94.                         if (s_vDSGrid[wPos + j * DRAGON_SOUL_BOX_COLUMN_NUM])
  95.                         {
  96.                             bEmpty = false;
  97.                             break;
  98.                         }
  99.                     }
  100.                     if (bEmpty)
  101.                     {
  102.                         for (int j = 0; j < item->GetSize(); j++)
  103.                         {
  104.                             s_vDSGrid[wPos + j * DRAGON_SOUL_BOX_COLUMN_NUM] =  wPos + 1;
  105.                         }
  106.                         bExistEmptySpace = true;
  107.                         break;
  108.                     }
  109.                 }
  110.                 if (bExistEmptySpace)
  111.                     break;
  112.             }
  113.             if (!bExistEmptySpace)
  114.                 return false;
  115.         }
  116.         else
  117.         {
  118.             int iPos = s_grid1.FindBlank(1, item->GetSize());
  119.             if (iPos >= 0)
  120.             {
  121.                 s_grid1.Put(iPos, 1, item->GetSize());
  122.             }
  123.             else
  124.             {
  125.                 iPos = s_grid2.FindBlank(1, item->GetSize());
  126.                 if (iPos >= 0)
  127.                 {
  128.                     s_grid2.Put(iPos, 1, item->GetSize());
  129.                 }
  130.                 else
  131.                 {
  132.                     iPos = s_grid3.FindBlank(1, item->GetSize());
  133.                     if (iPos >= 0)
  134.                     {
  135.                         s_grid3.Put(iPos, 1, item->GetSize());
  136.                     }
  137.                     else
  138.                     {
  139.                         iPos = s_grid4.FindBlank(1, item->GetSize());
  140.                         if (iPos >= 0)
  141.                         {
  142.                             s_grid4.Put(iPos, 1, item->GetSize());
  143.                         }
  144.                         else
  145.                         {
  146.                             return false;
  147.                         }
  148.                     }
  149.                 }
  150.             }
  151.         }
  152.     }
  153.     return true;
  154. }
Advertisement
Add Comment
Please, Sign In to add comment