Yardım K envanter

Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

CalvinGiorgio

Kurumsal Üye
Kurumsal Üye
Üye
Mesaj
665
Çözümler
14
Beğeni
85
Puan
539
Ticaret Puanı
0
Filesimde ekli olan "k" ek envanterdir.
Benzerlerinden yola çıkarak anlatımlarına baktım fakat kaldıramadım. Yardımcı olabilicek varsa sevinirim.
klen.jpg
 
Bende şuan senin dediğin şekilde kendime ekleme yapıyorum ve kopyala yapıştır yaparak kolayca olacak şey değil. Referans istiyorsan türkmmoda pachi tunga filesi var sabitte onun içindeki k envanterinde 6 bölümlüsü var ondan bakabilirsin.
6 menülü files bendede var hangi dosyalarda neler var neleri editlemek gerek hangi fonksiyonları eklemem gerek anlamıyorum ki
 
Anlayamayacak bişey yokki 6 lı filesin kodları ile senin 3 lü filesinin kodlarını karşılaştır zaten arasındaki farkı göreceksin tabi her yeri aynı olmayabilir o ayrı bir mesele ama %90 aynı kodlar pek fark yok.
 
Anlayamayacak bişey yokki 6 lı filesin kodları ile senin 3 lü filesinin kodlarını karşılaştır zaten arasındaki farkı göreceksin tabi her yeri aynı olmayabilir o ayrı bir mesele ama %90 aynı kodlar pek fark yok.
bilgim olmadığı için hata yapma olasılıgım artıyor ondan dolayı
şimdilik bilgim bu kadarına yetiyor

ab.jpg



görsel ekledim kordinatını verdim diğer görselleri değiştirdim tooltip ekledim
geriye kalanını yapamadım bir şekilde öğrenmeye çalışıyorum bakıyorum kodlarada bek birşey anlıyorum diyemem
 
bilgim olmadığı için hata yapma olasılıgım artıyor ondan dolayı
şimdilik bilgim bu kadarına yetiyor6781 eklentisini görüntüle
görsel ekledim kordinatını verdim diğer görselleri değiştirdim tooltip ekledim
geriye kalanını yapamadım bir şekilde öğrenmeye çalışıyorum bakıyorum kodlarada bek birşey anlıyorum diyemem
Hata yaparak öğreneceksin başka nasıl olacaktı. Kimse hatasız yapmıyor.
 
Bu foruma ilk girdiğimde o zamanlar source işlerine yeni başlamıştım ve forumdakilere K envanterini nasıl offline shopa uyarılacağım sormuştum sağolsun @Whistle ve @Trashy bana yardım etmişlerdi. Şimdi ise definesi eksik olan şeyleri bile sökebiliyorum ve uyarlıyabiliyorum. Önemli olan içindeki istek bir çok filesi indirip kodları kontrol etmek senin işine çok yarıcaktır. @melihalbayrak’ın dediği gibi hatasız kul olmaz.
 
Bu foruma ilk girdiğimde o zamanlar source işlerine yeni başlamıştım ve forumdakilere K envanterini nasıl offline shopa uyarılacağım sormuştum sağolsun @Whistle ve @Trashy bana yardım etmişlerdi. Şimdi ise definesi eksik olan şeyleri bile sökebiliyorum ve uyarlıyabiliyorum. Önemli olan içindeki istek bir çok filesi indirip kodları kontrol etmek senin işine çok yarıcaktır. @melihalbayrak’ın dediği gibi hatasız kul olmaz.
içimdeki istek olmasa o k envanterini dümdüz bırakıp işime bakardım. 3 seçenekli olan k envanterini 5 seçenek olarak uyarlama çalışıyorum başka filesdeki kodlara bakmak çözüm değil. Baktığımda birşey anlıyamıyorsam sıkıntı. Ben zaten bakıp inceledim anlıyamadığım için üstüne burda konu açtım. İnceleyip anlayabilicek olsam burda neden konu açayım ?

Hata yaparak öğreneceksin başka nasıl olacaktı. Kimse hatasız yapmıyor.
daha önceki anltımlardan yola çıkarak deniyecem teşekkürler
 
hala tek tek kodları elimle ekliyorum var olan sistemin üzerine ekliyorum. Bitti biticek zaten python kısmını hallettim kaynak doslarını bitirdim sayılır build edip test edecem sonuçlarını paylaşırım seninle tab ayarına dikkat ederek yapıyorum eğerki sorun çıkarsa onuda paylaşırım buraya umarım sorun çıkmaz

1621439050218.png

1621439188003.png

1621439201247.png

malesef olmadı sanırım Chest yerleri hatalı oraya ne yazacam bilemedim
 
Pıckup bloğunun kodları;

C++:
                else if (item->IsUpgradeItem())
                {
                    if ((iEmptyCell = GetEmptyUpgradeInventory(item)) == -1)
                    {
                        sys_log(0, "No empty ssu inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지하고 있는 아이템이 너무 많습니다."));
                        return false;
                    }
                }
                else if (item->IsBook())
                {
                    if ((iEmptyCell = GetEmptyBookInventory(item)) == -1)
                    {
                        sys_log(0, "No empty ssb inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지하고 있는 아이템이 너무 많습니다."));
                        return false;
                    }
                }
                else if (item->IsStone())
                {
                    if ((iEmptyCell = GetEmptyStoneInventory(item)) == -1)
                    {
                        sys_log(0, "No empty sss inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지하고 있는 아이템이 너무 많습니다."));
                        return false;
                    }
                }
                else if (item->IsChest())
                {
                    if ((iEmptyCell = GetEmptyChestInventory(item)) == -1)
                    {
                        sys_log(0, "No empty ssc inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지하고 있는 아이템이 너무 많습니다."));
                        return false;
                    }
                }
                else if (item->IsAttr())
                {
                    if ((iEmptyCell = GetEmptyAttrInventory(item)) == -1)
                    {
                        sys_log(0, "No empty ssa inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지하고 있는 아이템이 너무 많습니다."));
                        return false;
                    }
                }
                else if (item->IsFlower())
                {
                    if ((iEmptyCell = GetEmptyFlowerInventory(item)) == -1)
                    {
                        sys_log(0, "No empty ssf inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지하고 있는 아이템이 너무 많습니다."));
                        return false;
                    }
                }


C++:
#ifdef ENABLE_SPECIAL_STORAGE
                if (item->IsUpgradeItem() && item->IsStackable() && !IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_STACK))
                {
                    BYTE bCount = item->GetCount();
                    for (int i = 0; i < SPECIAL_INVENTORY_MAX_NUM; ++i)
                    {
                        LPITEM item2 = GetUpgradeInventoryItem(i);
                        if (!item2)
                            continue;
                        if (item2->GetVnum() == item->GetVnum())
                        {
                            BYTE bCount2 = MIN(200 - item2->GetCount(), bCount);
                            bCount -= bCount2;
                            item2->SetCount(item2->GetCount() + bCount2);
                            if (bCount == 0)
                            {
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s"), item2->GetName());
                                M2_DESTROY_ITEM(item);
                                return true;
                            }
                        }
                    }
                    item->SetCount(bCount);
                }
                else if (item->IsBook() && item->IsStackable() && !IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_STACK))
                {
                    BYTE bCount = item->GetCount();
                    for (int i = 0; i < SPECIAL_INVENTORY_MAX_NUM; ++i)
                    {
                        LPITEM item2 = GetBookInventoryItem(i);
                        if (!item2)
                            continue;
                        if (item2->GetVnum() == item->GetVnum())
                        {
                            int j;
                            for (j = 0; j < ITEM_SOCKET_MAX_NUM; ++j)
                                if (item2->GetSocket(j) != item->GetSocket(j))
                                    break;
                            if (j != ITEM_SOCKET_MAX_NUM)
                                continue;
                            BYTE bCount2 = MIN(200 - item2->GetCount(), bCount);
                            bCount -= bCount2;
                            item2->SetCount(item2->GetCount() + bCount2);
                            if (bCount == 0)
                            {
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s"), item2->GetName());
                                M2_DESTROY_ITEM(item);
                                return true;
                            }
                        }
                    }
                    item->SetCount(bCount);
                }
                else if (item->IsStone() && item->IsStackable() && !IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_STACK))
                {
                    BYTE bCount = item->GetCount();
                    for (int i = 0; i < SPECIAL_INVENTORY_MAX_NUM; ++i)
                    {
                        LPITEM item2 = GetStoneInventoryItem(i);
                        if (!item2)
                            continue;
                        if (item2->GetVnum() == item->GetVnum())
                        {
                            BYTE bCount2 = MIN(200 - item2->GetCount(), bCount);
                            bCount -= bCount2;
                            item2->SetCount(item2->GetCount() + bCount2);
                            if (bCount == 0)
                            {
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s"), item2->GetName());
                                M2_DESTROY_ITEM(item);
                                return true;
                            }
                        }
                    }
                    item->SetCount(bCount);
                }
                else if (item->IsChest() && item->IsStackable() && !IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_STACK))
                {
                    BYTE bCount = item->GetCount();
                    for (int i = 0; i < SPECIAL_INVENTORY_MAX_NUM; ++i)
                    {
                        LPITEM item2 = GetChestInventoryItem(i);
                        if (!item2)
                            continue;
                        if (item2->GetVnum() == item->GetVnum())
                        {
                            BYTE bCount2 = MIN(200 - item2->GetCount(), bCount);
                            bCount -= bCount2;
                            item2->SetCount(item2->GetCount() + bCount2);
                            if (bCount == 0)
                            {
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s"), item2->GetName());
                                M2_DESTROY_ITEM(item);
                                return true;
                            }
                        }
                    }
                    item->SetCount(bCount);
                }
                else if (item->IsAttr() && item->IsStackable() && !IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_STACK))
                {
                    BYTE bCount = item->GetCount();
                    for (int i = 0; i < SPECIAL_INVENTORY_MAX_NUM; ++i)
                    {
                        LPITEM item2 = GetAttrInventoryItem(i);
                        if (!item2)
                            continue;
                        if (item2->GetVnum() == item->GetVnum())
                        {
                            BYTE bCount2 = MIN(200 - item2->GetCount(), bCount);
                            bCount -= bCount2;
                            item2->SetCount(item2->GetCount() + bCount2);
                            if (bCount == 0)
                            {
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s"), item2->GetName());
                                M2_DESTROY_ITEM(item);
                                return true;
                            }
                        }
                    }
                    item->SetCount(bCount);
                }
                else if (item->IsFlower() && item->IsStackable() && !IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_STACK))
                {
                    BYTE bCount = item->GetCount();
                    for (int i = 0; i < SPECIAL_INVENTORY_MAX_NUM; ++i)
                    {
                        LPITEM item2 = GetFlowerInventoryItem(i);
                        if (!item2)
                            continue;
                        if (item2->GetVnum() == item->GetVnum())
                        {
                            BYTE bCount2 = MIN(200 - item2->GetCount(), bCount);
                            bCount -= bCount2;
                            item2->SetCount(item2->GetCount() + bCount2);
                            if (bCount == 0)
                            {
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s"), item2->GetName());
                                M2_DESTROY_ITEM(item);
                                return true;
                            }
                        }
                    }
                    item->SetCount(bCount);
                }
#endif
 
Pıckup bloğunun kodları;

C++:
                else if (item->IsUpgradeItem())
                {
                    if ((iEmptyCell = GetEmptyUpgradeInventory(item)) == -1)
                    {
                        sys_log(0, "No empty ssu inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지하고 있는 아이템이 너무 많습니다."));
                        return false;
                    }
                }
                else if (item->IsBook())
                {
                    if ((iEmptyCell = GetEmptyBookInventory(item)) == -1)
                    {
                        sys_log(0, "No empty ssb inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지하고 있는 아이템이 너무 많습니다."));
                        return false;
                    }
                }
                else if (item->IsStone())
                {
                    if ((iEmptyCell = GetEmptyStoneInventory(item)) == -1)
                    {
                        sys_log(0, "No empty sss inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지하고 있는 아이템이 너무 많습니다."));
                        return false;
                    }
                }
                else if (item->IsChest())
                {
                    if ((iEmptyCell = GetEmptyChestInventory(item)) == -1)
                    {
                        sys_log(0, "No empty ssc inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지하고 있는 아이템이 너무 많습니다."));
                        return false;
                    }
                }
                else if (item->IsAttr())
                {
                    if ((iEmptyCell = GetEmptyAttrInventory(item)) == -1)
                    {
                        sys_log(0, "No empty ssa inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지하고 있는 아이템이 너무 많습니다."));
                        return false;
                    }
                }
                else if (item->IsFlower())
                {
                    if ((iEmptyCell = GetEmptyFlowerInventory(item)) == -1)
                    {
                        sys_log(0, "No empty ssf inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지하고 있는 아이템이 너무 많습니다."));
                        return false;
                    }
                }


C++:
#ifdef ENABLE_SPECIAL_STORAGE
                if (item->IsUpgradeItem() && item->IsStackable() && !IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_STACK))
                {
                    BYTE bCount = item->GetCount();
                    for (int i = 0; i < SPECIAL_INVENTORY_MAX_NUM; ++i)
                    {
                        LPITEM item2 = GetUpgradeInventoryItem(i);
                        if (!item2)
                            continue;
                        if (item2->GetVnum() == item->GetVnum())
                        {
                            BYTE bCount2 = MIN(200 - item2->GetCount(), bCount);
                            bCount -= bCount2;
                            item2->SetCount(item2->GetCount() + bCount2);
                            if (bCount == 0)
                            {
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s"), item2->GetName());
                                M2_DESTROY_ITEM(item);
                                return true;
                            }
                        }
                    }
                    item->SetCount(bCount);
                }
                else if (item->IsBook() && item->IsStackable() && !IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_STACK))
                {
                    BYTE bCount = item->GetCount();
                    for (int i = 0; i < SPECIAL_INVENTORY_MAX_NUM; ++i)
                    {
                        LPITEM item2 = GetBookInventoryItem(i);
                        if (!item2)
                            continue;
                        if (item2->GetVnum() == item->GetVnum())
                        {
                            int j;
                            for (j = 0; j < ITEM_SOCKET_MAX_NUM; ++j)
                                if (item2->GetSocket(j) != item->GetSocket(j))
                                    break;
                            if (j != ITEM_SOCKET_MAX_NUM)
                                continue;
                            BYTE bCount2 = MIN(200 - item2->GetCount(), bCount);
                            bCount -= bCount2;
                            item2->SetCount(item2->GetCount() + bCount2);
                            if (bCount == 0)
                            {
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s"), item2->GetName());
                                M2_DESTROY_ITEM(item);
                                return true;
                            }
                        }
                    }
                    item->SetCount(bCount);
                }
                else if (item->IsStone() && item->IsStackable() && !IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_STACK))
                {
                    BYTE bCount = item->GetCount();
                    for (int i = 0; i < SPECIAL_INVENTORY_MAX_NUM; ++i)
                    {
                        LPITEM item2 = GetStoneInventoryItem(i);
                        if (!item2)
                            continue;
                        if (item2->GetVnum() == item->GetVnum())
                        {
                            BYTE bCount2 = MIN(200 - item2->GetCount(), bCount);
                            bCount -= bCount2;
                            item2->SetCount(item2->GetCount() + bCount2);
                            if (bCount == 0)
                            {
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s"), item2->GetName());
                                M2_DESTROY_ITEM(item);
                                return true;
                            }
                        }
                    }
                    item->SetCount(bCount);
                }
                else if (item->IsChest() && item->IsStackable() && !IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_STACK))
                {
                    BYTE bCount = item->GetCount();
                    for (int i = 0; i < SPECIAL_INVENTORY_MAX_NUM; ++i)
                    {
                        LPITEM item2 = GetChestInventoryItem(i);
                        if (!item2)
                            continue;
                        if (item2->GetVnum() == item->GetVnum())
                        {
                            BYTE bCount2 = MIN(200 - item2->GetCount(), bCount);
                            bCount -= bCount2;
                            item2->SetCount(item2->GetCount() + bCount2);
                            if (bCount == 0)
                            {
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s"), item2->GetName());
                                M2_DESTROY_ITEM(item);
                                return true;
                            }
                        }
                    }
                    item->SetCount(bCount);
                }
                else if (item->IsAttr() && item->IsStackable() && !IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_STACK))
                {
                    BYTE bCount = item->GetCount();
                    for (int i = 0; i < SPECIAL_INVENTORY_MAX_NUM; ++i)
                    {
                        LPITEM item2 = GetAttrInventoryItem(i);
                        if (!item2)
                            continue;
                        if (item2->GetVnum() == item->GetVnum())
                        {
                            BYTE bCount2 = MIN(200 - item2->GetCount(), bCount);
                            bCount -= bCount2;
                            item2->SetCount(item2->GetCount() + bCount2);
                            if (bCount == 0)
                            {
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s"), item2->GetName());
                                M2_DESTROY_ITEM(item);
                                return true;
                            }
                        }
                    }
                    item->SetCount(bCount);
                }
                else if (item->IsFlower() && item->IsStackable() && !IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_STACK))
                {
                    BYTE bCount = item->GetCount();
                    for (int i = 0; i < SPECIAL_INVENTORY_MAX_NUM; ++i)
                    {
                        LPITEM item2 = GetFlowerInventoryItem(i);
                        if (!item2)
                            continue;
                        if (item2->GetVnum() == item->GetVnum())
                        {
                            BYTE bCount2 = MIN(200 - item2->GetCount(), bCount);
                            bCount -= bCount2;
                            item2->SetCount(item2->GetCount() + bCount2);
                            if (bCount == 0)
                            {
                                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s"), item2->GetName());
                                M2_DESTROY_ITEM(item);
                                return true;
                            }
                        }
                    }
                    item->SetCount(bCount);
                }
#endif
ne yapmam gerektiğini söyler misin lütfen
 
Pickup kısmında hata vermiş derlerken kendi kodlarınla karşılaştır
Ekleme yaparken paylaşılan dosyadaki kodları incelemeden yaptım.
#ifdef ENABLE_SPECIAL_STORAGE şeklinde arattırdım hep
Çıkan sonuçlarda Örneğin bu şekilde çıkan sonuç
C++:
#ifdef ENABLE_SPECIAL_STORAGE
                else if (item->IsUpgradeItem())
                    item->AddToCharacter(this, TItemPos(UPGRADE_INVENTORY, iEmptyCell));
                else if (item->IsBook())
                    item->AddToCharacter(this, TItemPos(BOOK_INVENTORY, iEmptyCell));
                else if (item->IsStone())
                    item->AddToCharacter(this, TItemPos(STONE_INVENTORY, iEmptyCell));
#endif

Bu şekilde değiştirdim:
C++:
#ifdef ENABLE_SPECIAL_STORAGE
                else if (item->IsUpgradeItem())
                    item->AddToCharacter(this, TItemPos(UPGRADE_INVENTORY, iEmptyCell));
                else if (item->IsChestItem())
                    item->AddToCharacter(this, TItemPos(CHEST_INVENTORY, iEmptyCell));
                else if (item->IsBook())
                    item->AddToCharacter(this, TItemPos(BOOK_INVENTORY, iEmptyCell));
                else if (item->IsStone())
                    item->AddToCharacter(this, TItemPos(STONE_INVENTORY, iEmptyCell));
#endif
 
Yapmana gerek kalmadı zaten olmuyor. Çünkü eklenen sayfaların python kısmında işlevlerini yeri getirmesi gereken python kodları yok. Olmadığındanda çalışmıyor. Bunun için kodlama bilgisi ya da benzer dosyalar lazım.
 
Yapmana gerek kalmadı zaten olmuyor. Çünkü eklenen sayfaların python kısmında işlevlerini yeri getirmesi gereken python kodları yok. Olmadığındanda çalışmıyor. Bunun için kodlama bilgisi ya da benzer dosyalar lazım.
beceremediğim için sana bahsettiğim k envanterini eklemeye çalışıyorum şuan
 
İfdef else ve if app else ye dikkat et yoksa çalışması gerekenide silersin her şey sapıtır :)
sorunlu eklersem heralde build alamam diye düşünüyorum build edebilirsem eğer srcde sorun olmaz diye düşünüyorum bakayım deniyorum her yolu işte bu saat oldu deniyorum hala :D
 
Geri
Üst