Checkspace inventar 4

Înainte de a posta o problemă, caută în acest forum și poate găsești rezolvare.
Închis
Avatar utilizator
alinjuve23
Nivel 2

Nivel 2
Mesaje: 239
Membru din: 23 Apr 2015, 17:10
Aprecieri: 451  
Mulţumiri: 21  
Medalii

*Problemă/Întrebare: Nu pot negocia cu inventarul 4, chiar daca este liber, primesc in chat "Item divided"
Tipologie server: pvm easy
*Resursă folosită: -
*ServerFiles utilizat: cartof v4 sau v5
*Syserr: nimic
Poză: -
*Detalii suplimentare: -
syslog server:

Cod: Selectaţi tot

Dec  7 18:58:35 :: EXCHANGE AddItem success Lama Dinte Dragon+9 pos(1, 21) 0
Dec  7 18:58:35 :: CInputMain()::Exchange()  SubHeader 4 
Dec  7 18:58:35 :: CInputMain()::Exchange() ==> ACCEPT 
Dec  7 18:58:36 :: CInputMain()::Exchange()  SubHeader 4 
Dec  7 18:58:36 :: CInputMain()::Exchange() ==> ACCEPT 


Multumesc!
Avatar utilizator
alinjuve23
Nivel 2

Nivel 2
Mesaje: 239
Membru din: 23 Apr 2015, 17:10
Aprecieri: 451  
Mulţumiri: 21  
Medalii

Stie cineva o solutie?
Sau daca are cineva exhange.cpp functional, va rog postati.

Multumesc!
Avatar utilizator
iMerv3
Nivel 1

Nivel 1
Mesaje: 86
Membru din: 20 Mai 2020, 23:25
Aprecieri: 85  
Mulţumiri: 159  
Discord: Copiază ID
 Contact:
Medalii

Cod: Selectaţi tot

bool CExchange::CheckSpace()
{
    static CGrid s_grid1(5, INVENTORY_MAX_NUM/5 / 4); // inven page 1
    static CGrid s_grid2(5, INVENTORY_MAX_NUM/5 / 4); // inven page 2
    static CGrid s_grid3(5, INVENTORY_MAX_NUM/5 / 4); // inven page 3
    static CGrid s_grid4(5, INVENTORY_MAX_NUM/5 / 4); // inven page 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; ++i)
	{
		if (!(item = victim->GetInventoryItem(i)))
		{
			continue;
		}

		if (i <= (int32_t)(INVENTORY_MAX_NUM / 4))
		{
			s_grid1.Put(i, 1, item->GetSize());
		}
		else if (i <= (int32_t)(INVENTORY_MAX_NUM / 4) * 2)
		{
			s_grid2.Put(i, 1, item->GetSize());
		}
		else if (i <= (int32_t)(INVENTORY_MAX_NUM / 4) * 3)
		{
			s_grid3.Put(i, 1, item->GetSize());
		}
		else if (i <= (int32_t)(INVENTORY_MAX_NUM / 4) * 4)
		{
			s_grid4.Put(i, 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
                {
					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;
}
Pentru acest mesaj, iMerv3 for the post:
alinjuve23
Avatar utilizator
alinjuve23
Nivel 2

Nivel 2
Mesaje: 239
Membru din: 23 Apr 2015, 17:10
Aprecieri: 451  
Mulţumiri: 21  
Medalii

Functioneaza, multumesc!
TC.
Închis
Răspunsuri
19
Vizualizări
1248
Răspunsuri
12
Vizualizări
417
Răspunsuri
2
Vizualizări
305

Înapoi la “Probleme rezolvate”

  • Informaţie
  • Cine este conectat

    Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 29 vizitatori