Çözüldü envanter doluluğunu kontrol ettirme

  • Konuyu açan Konuyu açan enes turan
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 12
  • Gösterim Gösterim 91
Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

enes turan

Yardımsever Üye
Yardımsever Üye
MT Üye
Mesaj
503
Çözümler
31
Beğeni
219
Puan
609
Ticaret Puanı
0
merhabalar

konudaki sandık aynası ekledim normal envanter dolduğunda sandık açmayı durduruyor

dragonsoul envanteri içinde aynı şeyi yapmak istiyorum

char_item.cpp:
Genişlet Daralt Kopyala
        case ITEM_GIFTBOX:
        {
#ifdef ENABLE_SHOW_CHEST_DROP
                if (GetEmptyInventory(3) == -1)
                {
                    ChatPacket (CHAT_TYPE_INFO, "[LS;2034]");
                    return false;
                }
                if (GetEmptyDragonSoulInventory(1) == -1)
                {
                    ChatPacket (CHAT_TYPE_INFO, "[LS;2063]");
                    return false;
                }

şöyle bir ekleme yaptım fakat build sırasında hata alıyorum

Adsız.webp
 
Çözüm
@TheAdmin33

kullanmak istersen
Linkleri görebilmek için giriş yap veya kayıt ol.
eklemen gerekiyor ilk önce

daha sonra

C++:
Genişlet Daralt Kopyala
//service.h ekle

#define ENABLE_DRAGONSOUL_INVENTORY_BOX_SIZE

//char.h yoksa ekle varsa değiştir
#ifdef ENABLE_DRAGONSOUL_INVENTORY_BOX_SIZE
#ifdef ENABLE_ADDITIONAL_EQUIPMENT_PAGE
        int                GetEmptyDragonSoulInventoryType(BYTE size, BYTE ds_type);
#else
        int                GetEmptyDragonSoulInventoryType(BYTE size, BYTE ds_type) const;
#endif
#endif

//char_item.cpp

//arat

int CHARACTER::GetEmptyDragonSoulInventory(LPITEM pItem)

//kod bloğunu değiştir

#ifdef ENABLE_ADDITIONAL_EQUIPMENT_PAGE
int CHARACTER::GetEmptyDragonSoulInventory(LPITEM pItem)
#else
int CHARACTER::GetEmptyDragonSoulInventory(LPITEM pItem)...
GetEmptyDragonSoulInventory(item) şeklinde kullanman gerekiyor.
 
o şekilde kullanıncada sandık açmıyor texti yazdırıp sonlandırıyor envanterde yeterli alan yok diye
oyunun kodların istediğin şekilde simya envanteri doluluğunu kontrol eden bir kod bulunmuyor yani kendin yazman gerekiyor. Bu simya envanteri kontrolü eklemeyi bende düşünmüştüm ama oyunun içinde bunu yapan bir kod yok, olsa eklicektim.
 
oyunun kodların istediğin şekilde simya envanteri doluluğunu kontrol eden bir kod bulunmuyor yani kendin yazman gerekiyor. Bu simya envanteri kontrolü eklemeyi bende düşünmüştüm ama oyunun içinde bunu yapan bir kod yok, olsa eklicektim.
C++:
Genişlet Daralt Kopyala
                int iEmptyCell;
                if (item->IsDragonSoul())
                {
                    if ((iEmptyCell = GetEmptyDragonSoulInventory (item)) == -1)
                    {
                        sys_log (0, "No empty ds inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket (CHAT_TYPE_INFO, "[LS;445]");
                        return false;
                    }
                }

şöyle bir blok var ama buda işe yaramadı olmadı başka filesleri kontrol edeyim bir belki çıkar bişey
 
vatansever fileste bu simya envanteri kontrolü için kodlar var ama definesiz şekilde oradan çekin isterseniz
 
rayanufilesta simyanın tipine göre envanter kontolü yapan kod vardı oraya da bakabilirsin.
 
simya envanterinin slot kontrolünü yapan nasıl kod yok. Simya envanterine /i ile simya getir aynı simyadan tüm slotları doldur bakalım ne diyecek. Böyle birşeyin olması mümkün değil.
 
simya envanterinin slot kontrolünü yapan nasıl kod yok. Simya envanterine /i ile simya getir aynı simyadan tüm slotları doldur bakalım ne diyecek. Böyle birşeyin olması mümkün değil.
@TheAdmin33

böyle bir bloktan kontrol ettiriyor ekledim sorun yok
char_item.cpp:
Genişlet Daralt Kopyala
int CHARACTER::GetEmptyDragonSoulInventoryType(BYTE type/*simya türü yakut vs*/, BYTE ds_type/*0 işlenmemiş 1 yontulmuş vs*/)
{
    /*if (!DragonSoul_IsQualified())
    {
        return -1;
    }*/

    BYTE bSize = 1;

    if (type == 0)
    {
        WORD wBaseCell = ((192 + 32) * 0) + (ds_type * 32);

        if (WORD_MAX == wBaseCell)
            return -1;

        for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; ++i)
            if (IsEmptyItemGrid(TItemPos(DRAGON_SOUL_INVENTORY, i + wBaseCell), bSize))
                return i + wBaseCell;
    }
    else if (type == 1)
    {
        WORD wBaseCell = ((192 + 32) * 1) + (ds_type * 32);

        if (WORD_MAX == wBaseCell)
            return -1;

        for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; ++i)
            if (IsEmptyItemGrid(TItemPos(DRAGON_SOUL_INVENTORY, i + wBaseCell), bSize))
                return i + wBaseCell;
    }
    else if (type == 2)
    {
        WORD wBaseCell = ((192 + 32) * 2) + (ds_type * 32);

        if (WORD_MAX == wBaseCell)
            return -1;

        for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; ++i)
            if (IsEmptyItemGrid(TItemPos(DRAGON_SOUL_INVENTORY, i + wBaseCell), bSize))
                return i + wBaseCell;
    }
    else if (type == 3)
    {
        WORD wBaseCell = ((192 + 32) * 3) + (ds_type * 32);

        if (WORD_MAX == wBaseCell)
            return -1;

        for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; ++i)
            if (IsEmptyItemGrid(TItemPos(DRAGON_SOUL_INVENTORY, i + wBaseCell), bSize))
                return i + wBaseCell;
    }
    else if (type == 4)
    {
        WORD wBaseCell = ((192 + 32) * 4) + (ds_type * 32);

        if (WORD_MAX == wBaseCell)
            return -1;

        for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; ++i)
            if (IsEmptyItemGrid(TItemPos(DRAGON_SOUL_INVENTORY, i + wBaseCell), bSize))
                return i + wBaseCell;
    }
    else if (type == 5)
    {
        WORD wBaseCell = ((192 + 32) * 5) + (ds_type * 32);

        if (WORD_MAX == wBaseCell)
            return -1;

        for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; ++i)
            if (IsEmptyItemGrid(TItemPos(DRAGON_SOUL_INVENTORY, i + wBaseCell), bSize))
                return i + wBaseCell;
    }
    else if (type == 6)
    {
        WORD wBaseCell = ((192 + 32) * 6) + (ds_type * 32);

        if (WORD_MAX == wBaseCell)
            return -1;

        for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; ++i)
            if (IsEmptyItemGrid(TItemPos(DRAGON_SOUL_INVENTORY, i + wBaseCell), bSize))
                return i + wBaseCell;
    }
    return -1;
}

char_item.cpp:
Genişlet Daralt Kopyala
    case ITEM_GIFTBOX:
        {
#ifdef ENABLE_SHOW_CHEST_DROP
                if (GetEmptyInventory(3) == -1)
                {
                    ChatPacket (CHAT_TYPE_INFO, "[LS;2034]");
                    return false;
                }

                if (GetEmptyDragonSoulInventoryType(0, 0) == -1 || GetEmptyDragonSoulInventoryType(1, 0) == -1 || GetEmptyDragonSoulInventoryType(2, 0) == -1
                    || GetEmptyDragonSoulInventoryType(3, 0) == -1 || GetEmptyDragonSoulInventoryType(4, 0) == -1 || GetEmptyDragonSoulInventoryType(5, 0) == -1
                    || GetEmptyDragonSoulInventoryType(6, 5) == -1
                    )
                {

                    ChatPacket(CHAT_TYPE_INFO, "1Simya envanterinde işlenmemiş simyayalardan biri dolu.!");
                    return false;
                }
                if (GetEmptyDragonSoulInventoryType(0, 1) == -1 || GetEmptyDragonSoulInventoryType(1, 1) == -1 || GetEmptyDragonSoulInventoryType(2, 1) == -1
                    || GetEmptyDragonSoulInventoryType(3, 1) == -1 || GetEmptyDragonSoulInventoryType(4, 1) == -1 || GetEmptyDragonSoulInventoryType(5, 1) == -1
                    || GetEmptyDragonSoulInventoryType(6, 5) == -1
                    )
                {

                    ChatPacket(CHAT_TYPE_INFO, "2Simya envanterinde yontulmuş simyayalardan biri dolu.!");
                    return false;
                }
                if (GetEmptyDragonSoulInventoryType(0, 2) == -1 || GetEmptyDragonSoulInventoryType(1, 2) == -1 || GetEmptyDragonSoulInventoryType(2, 2) == -1
                    || GetEmptyDragonSoulInventoryType(3, 2) == -1 || GetEmptyDragonSoulInventoryType(4, 2) == -1 || GetEmptyDragonSoulInventoryType(5, 2) == -1
                    || GetEmptyDragonSoulInventoryType(6, 5) == -1
                    )
                {

                    ChatPacket(CHAT_TYPE_INFO, "3Simya envanterinde ender simyayalardan biri dolu.!");
                    return false;
                }
                if (GetEmptyDragonSoulInventoryType(0, 3) == -1 || GetEmptyDragonSoulInventoryType(1, 3) == -1 || GetEmptyDragonSoulInventoryType(2, 3) == -1
                    || GetEmptyDragonSoulInventoryType(3, 3) == -1 || GetEmptyDragonSoulInventoryType(4, 3) == -1 || GetEmptyDragonSoulInventoryType(5, 3) == -1
                    || GetEmptyDragonSoulInventoryType(6, 5) == -1
                    )
                {

                    ChatPacket(CHAT_TYPE_INFO, "4Simya envanterinde antika simyayalardan biri dolu.!");
                    return false;
                }
                if (GetEmptyDragonSoulInventoryType(0, 4) == -1 || GetEmptyDragonSoulInventoryType(1, 4) == -1 || GetEmptyDragonSoulInventoryType(2, 4) == -1
                    || GetEmptyDragonSoulInventoryType(3, 4) == -1 || GetEmptyDragonSoulInventoryType(4, 4) == -1 || GetEmptyDragonSoulInventoryType(5, 4) == -1
                    || GetEmptyDragonSoulInventoryType(6, 5) == -1
                    )
                {

                    ChatPacket(CHAT_TYPE_INFO, "5Simya envanterinde efsanevi simyayalardan biri dolu.!");
                    return false;
                }
                if (GetEmptyDragonSoulInventoryType(0, 5) == -1 || GetEmptyDragonSoulInventoryType(1, 5) == -1 || GetEmptyDragonSoulInventoryType(2, 5) == -1
                    || GetEmptyDragonSoulInventoryType(3, 5) == -1 || GetEmptyDragonSoulInventoryType(4, 5) == -1 || GetEmptyDragonSoulInventoryType(5, 5) == -1
                    || GetEmptyDragonSoulInventoryType(6, 5) == -1
                    )
                {

                    ChatPacket(CHAT_TYPE_INFO, "66Simya envanterinde mitsi simyayalardan biri dolu.!");
                    return false;
                }

fakat envanter dolu hatası veriyor hiç açmıyor

galiba ENABLE_EXTENDED_DS_INVENTORY sisteme ihtiyaç duyuyor onu ekliyorum suan
 
LPITEM item = ITEM_MANAGER::instance().CreateItem(item_kodu, item_adet);


if (item)
{
if (item->IsDragonSoul())
{
int iEmptyPos = ch->GetEmptyDragonSoulInventory(item);

if (iEmptyPos != -1)
{
// dolu değilse
}
else
{
// dolu ise
}
}
}


Telefondan yazdım kodları ama bunun çalışması gerek. Örnek olarak verdim yanii çalışma mantığını anlattım. Eğer eğer CreateItem yerine sabit vnum ve count yazarsan sürekli o oluşur. Değişken varsa onu yazarsın count değişkeni varsa onu yazarsın. Eğer oluşturulan item simya envanterine ait bir item mi onun sorgusu eğer öyle ise simya envanterindeki itemler her zaman 1 SLOT yer kaplayacağı için GetSize almaz sadece oluşturulan item gönderilir ve bu item için boş yerin var mı diye sorulur eğer boş yeri varsa return bize bir değer döndürür bu değer ise sıradaki boş yeri verir ve geri gelir ona göre tekrar işlem yapar. Ne yapmak istiyorsan.
 
Son düzenleme:
@TheAdmin33

kullanmak istersen
Linkleri görebilmek için giriş yap veya kayıt ol.
eklemen gerekiyor ilk önce

daha sonra

C++:
Genişlet Daralt Kopyala
//service.h ekle

#define ENABLE_DRAGONSOUL_INVENTORY_BOX_SIZE

//char.h yoksa ekle varsa değiştir
#ifdef ENABLE_DRAGONSOUL_INVENTORY_BOX_SIZE
#ifdef ENABLE_ADDITIONAL_EQUIPMENT_PAGE
        int                GetEmptyDragonSoulInventoryType(BYTE size, BYTE ds_type);
#else
        int                GetEmptyDragonSoulInventoryType(BYTE size, BYTE ds_type) const;
#endif
#endif

//char_item.cpp

//arat

int CHARACTER::GetEmptyDragonSoulInventory(LPITEM pItem)

//kod bloğunu değiştir

#ifdef ENABLE_ADDITIONAL_EQUIPMENT_PAGE
int CHARACTER::GetEmptyDragonSoulInventory(LPITEM pItem)
#else
int CHARACTER::GetEmptyDragonSoulInventory(LPITEM pItem) const
#endif
{
    if (NULL == pItem || !pItem->IsDragonSoul())
        return -1;
    if (!DragonSoul_IsQualified())
    {
        return -1;
    }
    BYTE bSize = pItem->GetSize();
    WORD wBaseCell = DSManager::instance().GetBasePosition(pItem);

    if (WORD_MAX == wBaseCell)
        return -1;

#ifdef ENABLE_EXTENDED_DS_INVENTORY
    for (int i = 0; i < (DRAGON_SOUL_BOX_SIZE * DRAGON_SOUL_INVENTORY_PAGE_COUNT); ++i)
#else
    for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; ++i)
#endif
        if (IsEmptyItemGrid(TItemPos(DRAGON_SOUL_INVENTORY, i + wBaseCell), bSize))
            return i + wBaseCell;

    return -1;
}

//altına ekle

#ifdef ENABLE_DRAGONSOUL_INVENTORY_BOX_SIZE
#ifdef ENABLE_ADDITIONAL_EQUIPMENT_PAGE
int CHARACTER::GetEmptyDragonSoulInventoryType(BYTE type, BYTE ds_type)
#else
int CHARACTER::GetEmptyDragonSoulInventoryType(BYTE type, BYTE ds_type) const
#endif
{
    /*if (!DragonSoul_IsQualified())
    {
        return -1;
    }*/

    BYTE bSize = 1;

    if (type == 0)
    {
        WORD wBaseCell = ((192 + 32) * 0) + (ds_type * 32);

        if (WORD_MAX == wBaseCell)
            return -1;

        for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; ++i)
            if (IsEmptyItemGrid(TItemPos(DRAGON_SOUL_INVENTORY, i + wBaseCell), bSize))
                return i + wBaseCell;
    }
    else if (type == 1)
    {
        WORD wBaseCell = ((192 + 32) * 1) + (ds_type * 32);

        if (WORD_MAX == wBaseCell)
            return -1;

        for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; ++i)
            if (IsEmptyItemGrid(TItemPos(DRAGON_SOUL_INVENTORY, i + wBaseCell), bSize))
                return i + wBaseCell;
    }
    else if (type == 2)
    {
        WORD wBaseCell = ((192 + 32) * 2) + (ds_type * 32);

        if (WORD_MAX == wBaseCell)
            return -1;

        for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; ++i)
            if (IsEmptyItemGrid(TItemPos(DRAGON_SOUL_INVENTORY, i + wBaseCell), bSize))
                return i + wBaseCell;
    }
    else if (type == 3)
    {
        WORD wBaseCell = ((192 + 32) * 3) + (ds_type * 32);

        if (WORD_MAX == wBaseCell)
            return -1;

        for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; ++i)
            if (IsEmptyItemGrid(TItemPos(DRAGON_SOUL_INVENTORY, i + wBaseCell), bSize))
                return i + wBaseCell;
    }
    else if (type == 4)
    {
        WORD wBaseCell = ((192 + 32) * 4) + (ds_type * 32);

        if (WORD_MAX == wBaseCell)
            return -1;

        for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; ++i)
            if (IsEmptyItemGrid(TItemPos(DRAGON_SOUL_INVENTORY, i + wBaseCell), bSize))
                return i + wBaseCell;
    }
    else if (type == 5)
    {
        WORD wBaseCell = ((192 + 32) * 5) + (ds_type * 32);

        if (WORD_MAX == wBaseCell)
            return -1;

        for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; ++i)
            if (IsEmptyItemGrid(TItemPos(DRAGON_SOUL_INVENTORY, i + wBaseCell), bSize))
                return i + wBaseCell;
    }
    else if (type == 6)
    {
        WORD wBaseCell = ((192 + 32) * 6) + (ds_type * 32);

        if (WORD_MAX == wBaseCell)
            return -1;

        for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; ++i)
            if (IsEmptyItemGrid(TItemPos(DRAGON_SOUL_INVENTORY, i + wBaseCell), bSize))
                return i + wBaseCell;
    }

    return -1;
}
#endif

//arat

        case ITEM_GIFTBOX:
        {
#ifdef ENABLE_SHOW_CHEST_DROP
                if (GetEmptyInventory(3) == -1)
                {
                    ChatPacket (CHAT_TYPE_INFO, "[LS;2034]");
                    return false;
                }

//altına ekle

#ifdef ENABLE_DRAGONSOUL_INVENTORY_BOX_SIZE
                if (GetEmptyDragonSoulInventoryType(0, 0) == -1 || GetEmptyDragonSoulInventoryType(1, 0) == -1 || GetEmptyDragonSoulInventoryType(2, 0) == -1
                    || GetEmptyDragonSoulInventoryType(3, 0) == -1 || GetEmptyDragonSoulInventoryType(4, 0) == -1 || GetEmptyDragonSoulInventoryType(5, 0) == -1
                    || GetEmptyDragonSoulInventoryType(6, 5) == -1
                    )
                {

                    //ChatPacket(CHAT_TYPE_INFO, "Simya envanterinde i?lenmemi? simyayalardan biri dolu.!");
                    ChatPacket (CHAT_TYPE_INFO, "[LS;2063]");
                    return false;
                }
                if (GetEmptyDragonSoulInventoryType(0, 1) == -1 || GetEmptyDragonSoulInventoryType(1, 1) == -1 || GetEmptyDragonSoulInventoryType(2, 1) == -1
                    || GetEmptyDragonSoulInventoryType(3, 1) == -1 || GetEmptyDragonSoulInventoryType(4, 1) == -1 || GetEmptyDragonSoulInventoryType(5, 1) == -1
                    || GetEmptyDragonSoulInventoryType(6, 5) == -1
                    )
                {

                    //ChatPacket(CHAT_TYPE_INFO, "Simya envanterinde yontulmu? simyayalardan biri dolu.!");
                    ChatPacket (CHAT_TYPE_INFO, "[LS;2064]");
                    return false;
                }
                if (GetEmptyDragonSoulInventoryType(0, 2) == -1 || GetEmptyDragonSoulInventoryType(1, 2) == -1 || GetEmptyDragonSoulInventoryType(2, 2) == -1
                    || GetEmptyDragonSoulInventoryType(3, 2) == -1 || GetEmptyDragonSoulInventoryType(4, 2) == -1 || GetEmptyDragonSoulInventoryType(5, 2) == -1
                    || GetEmptyDragonSoulInventoryType(6, 5) == -1
                    )
                {

                    //ChatPacket(CHAT_TYPE_INFO, "Simya envanterinde ender simyayalardan biri dolu.!");
                    ChatPacket (CHAT_TYPE_INFO, "[LS;2065]");
                    return false;
                }
                if (GetEmptyDragonSoulInventoryType(0, 3) == -1 || GetEmptyDragonSoulInventoryType(1, 3) == -1 || GetEmptyDragonSoulInventoryType(2, 3) == -1
                    || GetEmptyDragonSoulInventoryType(3, 3) == -1 || GetEmptyDragonSoulInventoryType(4, 3) == -1 || GetEmptyDragonSoulInventoryType(5, 3) == -1
                    || GetEmptyDragonSoulInventoryType(6, 5) == -1
                    )
                {

                    //ChatPacket(CHAT_TYPE_INFO, "Simya envanterinde antika simyayalardan biri dolu.!");
                    ChatPacket (CHAT_TYPE_INFO, "[LS;2066]");
                    return false;
                }
                if (GetEmptyDragonSoulInventoryType(0, 4) == -1 || GetEmptyDragonSoulInventoryType(1, 4) == -1 || GetEmptyDragonSoulInventoryType(2, 4) == -1
                    || GetEmptyDragonSoulInventoryType(3, 4) == -1 || GetEmptyDragonSoulInventoryType(4, 4) == -1 || GetEmptyDragonSoulInventoryType(5, 4) == -1
                    || GetEmptyDragonSoulInventoryType(6, 5) == -1
                    )
                {

                    //ChatPacket(CHAT_TYPE_INFO, "Simya envanterinde efsanevi simyayalardan biri dolu.!");
                    ChatPacket (CHAT_TYPE_INFO, "[LS;2067]");
                    return false;
                }
                if (GetEmptyDragonSoulInventoryType(0, 5) == -1 || GetEmptyDragonSoulInventoryType(1, 5) == -1 || GetEmptyDragonSoulInventoryType(2, 5) == -1
                    || GetEmptyDragonSoulInventoryType(3, 5) == -1 || GetEmptyDragonSoulInventoryType(4, 5) == -1 || GetEmptyDragonSoulInventoryType(5, 5) == -1
                    || GetEmptyDragonSoulInventoryType(6, 5) == -1
                    )
                {

                    //ChatPacket(CHAT_TYPE_INFO, "Simya envanterinde mitsi simyayalardan biri dolu.!");
                    ChatPacket (CHAT_TYPE_INFO, "[LS;2068]");
                    return false;
                }
#endif

bu şekilde şuan sorunsuz çalışıyor hangi envanter dolarsa duruyor ugraşmak isteyen olursa tam anlatım ve defineli hali burda konu kapatılabilir teşekkürler :)

not:
ENABLE_ADDITIONAL_EQUIPMENT_PAGE sistemi olduğu için uyarlama yaptım ben sizde yoksa silebilirsiniz yada silmesenizde sorun çıkarmaz.
 

Dosya Eklentileri

Son düzenleme:
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Üst