Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Src/exchange.cpp
- This is what i had in bool CExchange::CheckSpace()
- bool CExchange::CheckSpace()
- {
- static CGrid s_grid1(5, INVENTORY_MAX_NUM/5 / 4);
- static CGrid s_grid2(5, INVENTORY_MAX_NUM/5 / 4);
- static CGrid s_grid3(5, INVENTORY_MAX_NUM/5 / 4);
- static CGrid s_grid4(5, INVENTORY_MAX_NUM/5 / 4);
- s_grid1.Clear();
- s_grid2.Clear();
- s_grid3.Clear();
- s_grid4.Clear();
- LPCHARACTER victim = GetCompany()->GetOwner();
- LPITEM item;
- int i;
- for (i = 0; i < INVENTORY_MAX_NUM / 2; ++i)
- {
- if (!(item = victim->GetInventoryItem(i)))
- continue;
- s_grid1.Put(i, 1, item->GetSize());
- }
- for (i = INVENTORY_MAX_NUM / 2; i < INVENTORY_MAX_NUM; ++i)
- {
- if (!(item = victim->GetInventoryItem(i)))
- continue;
- s_grid2.Put(i - INVENTORY_MAX_NUM / 2, 1, item->GetSize());
- }
- 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;
- #ifdef NEW_ADD_INVENTORY
- int envanterblack;
- if (item->IsDragonSoul())
- envanterblack = victim->GetEmptyDragonSoulInventory(item);
- else
- envanterblack = victim->GetEmptyInventory(item->GetSize());
- if (envanterblack < 0)
- {
- return false;
- }
- #endif
- 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
- {
- return false;
- }
- }
- }
- }
- return true;
- }
- Changed it to this :
- bool CExchange::CheckSpace()
- {
- static CGrid s_grid1(5, INVENTORY_MAX_NUM/5 / 4);
- static CGrid s_grid2(5, INVENTORY_MAX_NUM/5 / 4);
- static CGrid s_grid3(5, INVENTORY_MAX_NUM/5 / 4);
- static CGrid s_grid4(5, INVENTORY_MAX_NUM/5 / 4);
- s_grid1.Clear();
- s_grid2.Clear();
- s_grid3.Clear();
- s_grid4.Clear();
- LPCHARACTER victim = GetCompany()->GetOwner();
- LPITEM item;
- int i;
- for (i = 0; i < INVENTORY_MAX_NUM / 4; ++i) // slot 1
- {
- if (!(item = victim->GetInventoryItem(i)))
- continue;
- s_grid1.Put(i, 1, item->GetSize());
- }
- for (i = INVENTORY_MAX_NUM / 4; i < (INVENTORY_MAX_NUM / 4) * 2; ++i) // slot 2
- {
- if (!(item = victim->GetInventoryItem(i)))
- continue;
- s_grid2.Put(i - INVENTORY_MAX_NUM / 4, 1, item->GetSize());
- }
- for (i = (INVENTORY_MAX_NUM / 4) * 2; i < (INVENTORY_MAX_NUM / 4) * 3; ++i) // slot 3
- {
- if (!(item = victim->GetInventoryItem(i)))
- continue;
- s_grid3.Put(i - (INVENTORY_MAX_NUM / 4) * 2, 1, item->GetSize());
- }
- for (i = (INVENTORY_MAX_NUM / 4) * 3; i < (INVENTORY_MAX_NUM / 4) * 4; ++i) // slot 4
- {
- if (!(item = victim->GetInventoryItem(i)))
- continue;
- s_grid4.Put(i - (INVENTORY_MAX_NUM / 4) * 3, 1, item->GetSize());
- }
- 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;
- #ifdef NEW_ADD_INVENTORY
- int envanterblack;
- if (item->IsDragonSoul())
- envanterblack = victim->GetEmptyDragonSoulInventory(item);
- else
- envanterblack = victim->GetEmptyInventory(item->GetSize());
- if (envanterblack < 0)
- return false;
- #endif
- 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
- {
- iPos = s_grid4.FindBlank(1, item->GetSize());
- if (iPos >= 0)
- {
- s_grid4.Put(iPos, 1, item->GetSize());
- }
- else
- {
- return false;
- }
- }
- }
- }
- }
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement