Sziasztok.!
Game fordítást követően ezt a hibaüzenetet kapom:
https://prnt.sc/106xjht
Exchange.cpp erre vonatkozó sorai:
#ifdef ENABLE_EXTEND_INVEN_SYSTEM
bool CExchange::CheckSpace()
{
std::array<std::unique_ptr<CGrid>, static_cast<const int>(INVENTORY_PAGE_COUNT)> s_grid;
static std::vector <WORD> s_vDSGrid(DRAGON_SOUL_INVENTORY_MAX_NUM);
LPITEM item;
bool bDSInitialized = false;
int new_size, invenpoint = GetCompany()->GetOwner()->Inven_Point();
for (size_t i = 0; i < s_grid.size(); i++) {
if (i < INVENTORY_OPEN_PAGE_COUNT) {
s_grid[i] = std::make_unique<CGrid>(INVENTORY_WIDTH,INVENTORY_HEIGHT);
continue;
}
if (invenpoint > 0 && invenpoint <= INVENTORY_HEIGHT)
new_size = invenpoint;
else if (invenpoint >= INVENTORY_HEIGHT)
new_size = INVENTORY_HEIGHT;
else
new_size = 0;
s_grid[i] = std::make_unique<CGrid>(INVENTORY_WIDTH,new_size);
invenpoint -= INVENTORY_HEIGHT;
}
for (size_t j = 0; j < s_grid.size(); j++) {
s_grid[j]->Clear();
for (auto i = INVENTORY_PAGE_SIZE * j; i < INVENTORY_PAGE_SIZE * (j+1); ++i) {
if (!(item = GetCompany()->GetOwner()->GetInventoryItem(i)))
continue;
s_grid[j]->Put(i - INVENTORY_PAGE_SIZE * j, 1, item->GetSize());
}
}
for (auto i = 0; i < EXCHANGE_ITEM_MAX_NUM; ++i) {
if (!(item = m_apItems[i])) continue;
if (item->IsDragonSoul()) {
if (!GetCompany()->GetOwner()->DragonSoul_IsQualified()) return false;
if (!bDSInitialized) {
bDSInitialized = true;
GetCompany()->GetOwner()->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 {
bool existspace = false;
for (size_t i = 0; i < s_grid.size(); i++) {
int iPos = s_grid[i]->FindBlank(1, item->GetSize());
if (iPos >= 0) {
s_grid[i]->Put(iPos, 1, item->GetSize());
existspace = true;
break;
}
else
if (i == s_grid.size() -1)
return false;
}
if (existspace)
continue;
}}
return true;
}
#else
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
s_grid1.Clear();
s_grid2.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;
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;
}
#endif
https://prnt.sc/106xi4a
Gondolom, hogy a s_grid deklarálása nem jó, mert mindenhol azzal van gond.
Illetve for ciklusban nem értem miért van "auto i.." (nem kéne deklarálni azt az i változót?)
Ezzel kapcsolatban tudna nekem valaki valami segítséget nyújtani?
EDIT:
Némi google használat után rájöttem, hogy a 9.2-es forrásos BSD-n nem a megfelelő c++ compiler van.
Ahhoz, hogy ilyen tömböket használjak minimum c++11 kéne. (Ha jól értelmezem ezt)
Most keresem azt, hogyan lehet frissíteni, a .vdi-n. Addig ha valaki tud segíteni ne tartsa magában :D
Ha lenne utánpótlás, akinek lenne ideje és energiája átelemezni a témát,
akkor bizonyosabb több programozóval diskurálhatnál, de a jelenlegi állás az,
hogy maximum azok érthetneek a dologhoz, akik kényszerből vagy hobbiból
értenek ehhez a témakörhöz. Laikus c++ fejlesztő még a 11-es vboxhoz se
nagyon nyúlt még, nem hogy az újonc p-szerós metinfejlesztők.
Kell csinálni egy vboxban lévő freebsd 11-es rendszert, és arra feltenni a gcc 8-as verziót, valamint a többiből is az újabb dolgokat, aztán oda átrakni a forrás fájljaidat, és ott forditani.