Çözüldü ikarus offline shop k envanter uyarlama

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

MT Üye
MT Üye
Mesaj
236
Çözümler
9
Beğeni
82
Puan
464
Ticaret Puanı
0
merhabalar bir çok uyarlamasını yaptım fakat offline shopdan item alınca veya pazarı kapatınca itemler normal envantere geliyor

kullandığım offshop =ikarus gridli
kullandığım k envanter = k envanter



uzun ugraşları sonucu çözüm hem satın alma hemde safeboxtan item aldıktan sonra gerekli itemler k envanterine gider

new_offlineshop_manager.cpp
açılır ve aratılır
Kod:
    bool CShopManager::RecvShopBuyDBPacket(DWORD dwBuyerID, DWORD dwOwnerID, DWORD dwItemID)

void bloğu komple değiştirilir:
    bool CShopManager::RecvShopBuyDBPacket(DWORD dwBuyerID, DWORD dwOwnerID, DWORD dwItemID)
    {
        OFFSHOP_DEBUG("buyer %u , owner %u , itemid %u ", dwBuyerID, dwOwnerID, dwItemID);

        CShop* pkShop = GetShopByOwnerID(dwOwnerID);
        if (!pkShop)
            return false;


        CShopItem* pItem = nullptr;
        if (!pkShop->GetItem(dwItemID, &pItem))
            return false;

        OFFSHOP_DEBUG("checked %s", "successful");

        LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(dwBuyerID);

        if (ch)
        {
            OFFSHOP_DEBUG("buyer is online , name %s , item id %u ", ch->GetName(), dwItemID);

            LPITEM pkItem = pItem->CreateItem();
            if (!pkItem)
            {
                sys_err("cannot create item ( dwItemID %u , dwVnum %u, dwShopOwner %u, dwBuyer %u ) ", dwItemID, pItem->GetInfo()->dwVnum, dwOwnerID, dwBuyerID);
                return false;
            }

            int cell;
            if (pkItem->IsDragonSoul())
                cell = ch->GetEmptyDragonSoulInventory(pkItem);
    #ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
            else if (pkItem->IsSkillBook())
            {
                cell = ch->GetEmptySkillBookInventory(pkItem->GetSize());
            }
            else if (pkItem->IsUpgradeItem())
            {
                cell = ch->GetEmptyUpgradeItemsInventory(pkItem->GetSize());
            }
            else if (pkItem->IsStone())
            {
                cell = ch->GetEmptyStoneInventory(pkItem->GetSize());
            }
            else if (pkItem->IsBox())
            {
                cell = ch->GetEmptyBoxInventory(pkItem->GetSize());
            }
            else if (pkItem->IsEfsun())
            {
                cell = ch->GetEmptyEfsunInventory(pkItem->GetSize());
            }
            else if (pkItem->IsCicek())
            {
                cell = ch->GetEmptyCicekInventory(pkItem->GetSize());
            }
    #endif
            else
                cell = ch->GetEmptyInventory(pkItem->GetSize());

            if (cell != -1)
            {
                if (pkItem->IsDragonSoul())
                    pkItem->AddToCharacter(ch, TItemPos(DRAGON_SOUL_INVENTORY, cell));
    #ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
                else if (pkItem->IsSkillBook())
                    pkItem->AddToCharacter(ch, TItemPos(INVENTORY, cell));
                else if (pkItem->IsUpgradeItem())
                    pkItem->AddToCharacter(ch, TItemPos(INVENTORY, cell));
                else if (pkItem->IsStone())
                    pkItem->AddToCharacter(ch, TItemPos(INVENTORY, cell));
                else if (pkItem->IsBox())
                    pkItem->AddToCharacter(ch, TItemPos(INVENTORY, cell));
                else if (pkItem->IsEfsun())
                    pkItem->AddToCharacter(ch, TItemPos(INVENTORY, cell));
                else if (pkItem->IsCicek())
                    pkItem->AddToCharacter(ch, TItemPos(INVENTORY, cell));
    #endif
                else
                    pkItem->AddToCharacter(ch, TItemPos(INVENTORY, cell));
            }

            DWORD dwItemID = pItem->GetID();
            pkShop->BuyItem(dwItemID);
        }

        else
        {
            OFFSHOP_DEBUG("buyer isn't online , item removed %u (shop %u)", dwItemID, pkShop->GetOwnerPID());

            DWORD dwItemID = pItem->GetID();
            pkShop->BuyItem(dwItemID);
        }


        return true;
    }

tekrar aratılır
Kod:
    bool CShopManager::RecvShopSafeboxGetItemClientPacket(LPCHARACTER ch, DWORD dwItemID)

ve değiştirilir

void bloğu komple değiştirilir:
    bool CShopManager::RecvShopSafeboxGetItemClientPacket(LPCHARACTER ch, DWORD dwItemID)
    {
        if (!ch || !ch->GetShopSafebox())
            return false;

        CShopSafebox* pkSafebox = ch->GetShopSafebox();
        CShopItem* pItem = nullptr;

        if (!pkSafebox->GetItem(dwItemID, &pItem))
            return false;

        LPITEM pkItem = pItem->CreateItem();
        if (!pkItem)
            return false;


        int iEmptyPos = -1;
        if (pkItem->IsDragonSoul())
            iEmptyPos = ch->GetEmptyDragonSoulInventory(pkItem);
    #ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
            else if (pkItem->IsSkillBook())
            {
                iEmptyPos = ch->GetEmptySkillBookInventory(pkItem->GetSize());
            }
            else if (pkItem->IsUpgradeItem())
            {
                iEmptyPos = ch->GetEmptyUpgradeItemsInventory(pkItem->GetSize());
            }
            else if (pkItem->IsStone())
            {
                iEmptyPos = ch->GetEmptyStoneInventory(pkItem->GetSize());
            }
            else if (pkItem->IsBox())
            {
                iEmptyPos = ch->GetEmptyBoxInventory(pkItem->GetSize());
            }
            else if (pkItem->IsEfsun())
            {
                iEmptyPos = ch->GetEmptyEfsunInventory(pkItem->GetSize());
            }
            else if (pkItem->IsCicek())
            {
                iEmptyPos = ch->GetEmptyCicekInventory(pkItem->GetSize());
            }
    #endif
        else
            iEmptyPos = ch->GetEmptyInventory(pkItem->GetSize());

        if (iEmptyPos == -1)
        {
            M2_DESTROY_ITEM(pkItem);
            return false;
        }

        // patch with warp check
        ch->SetOfflineShopUseTime();

        if (pkSafebox->RemoveItem(dwItemID))
        {
            pkSafebox->RefreshToOwner();
            if (pkItem->IsDragonSoul())
                pkItem->AddToCharacter(ch, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyPos));
    #ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
                else if (pkItem->IsSkillBook())
                    pkItem->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
                else if (pkItem->IsUpgradeItem())
                    pkItem->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
                else if (pkItem->IsStone())
                    pkItem->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
                else if (pkItem->IsBox())
                    pkItem->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
                else if (pkItem->IsEfsun())
                    pkItem->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
                else if (pkItem->IsCicek())
                    pkItem->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
    #endif
            else
                pkItem->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
        }

        SendShopSafeboxGetItemDBPacket(ch->GetPlayerID(), dwItemID);
        return true;
    }
konu kapatılabilir

karşılaştırma yapabilmeniz için dosyayı bırakıyorum yardımlarından ötürü @hasanmacit tekrar teşekkür ederim.
 

Dosya Eklentileri

  • new_offlineshop_manager.rar
    15 KB · Gösterim: 0
Son düzenleme:
ch pos olan kısımları split inventory kısmını sadece

TItemPos(INVENTORY, pos) olucak şekilde düzeltir misin
Adsız.png
 
:D ne işti ya

bir sürü files indirdim k envanter ekli ikarus ekli hiçbiri offlineshop dosyalarında bir değişiklik yapmamış acaba farklı bir yerden mi yapıyorlar :/
python kısmına bak bide kafamı veremedim oraya tam k envanter hiç kullanmadım bide zaten
 
@hasanmacit
Kod:
    bool CShopManager::RecvShopSafeboxGetItemClientPacket(LPCHARACTER ch, DWORD dwItemID)
    {
        if (!ch || !ch->GetShopSafebox())
            return false;

        CShopSafebox* pkSafebox = ch->GetShopSafebox();
        CShopItem* pItem = nullptr;

        if (!pkSafebox->GetItem(dwItemID, &pItem))
            return false;

        LPITEM pkItem = pItem->CreateItem();
        if (!pkItem)
            return false;


        int iEmptyPos = -1;
        if (pkItem->IsDragonSoul())
            iEmptyPos = ch->GetEmptyDragonSoulInventory(pkItem);
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
    else if (pkItem->IsSkillBook())
    {
        iEmptyPos = ch->GetEmptySkillBookInventory(pkItem->GetSize());
    }
    else if (pkItem->IsUpgradeItem())
    {
        iEmptyPos = ch->GetEmptyUpgradeItemsInventory(pkItem->GetSize());
    }
    else if (pkItem->IsStone())
    {
        iEmptyPos = ch->GetEmptyStoneInventory(pkItem->GetSize());
    }
    else if (pkItem->IsBox())
    {
        iEmptyPos = ch->GetEmptyBoxInventory(pkItem->GetSize());
    }
    else if (pkItem->IsEfsun())
    {
        iEmptyPos = ch->GetEmptyEfsunInventory(pkItem->GetSize());
    }
    else if (pkItem->IsCicek())
    {
        iEmptyPos = ch->GetEmptyCicekInventory(pkItem->GetSize());
    }
#endif
        else
            iEmptyPos = ch->GetEmptyInventory(pkItem->GetSize());

        if (iEmptyPos == -1)
        {
            M2_DESTROY_ITEM(pkItem);
            return false;
        }

        // patch with warp check
        ch->SetOfflineShopUseTime();

        if (pkSafebox->RemoveItem(dwItemID))
        {
            pkSafebox->RefreshToOwner();
            if (pkItem->IsDragonSoul())
                pkItem->AddToCharacter(ch, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyPos));
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
            else if (pkItem->IsSkillBook())
                pkItem->AddToCharacter(ch, TItemPos(SKILL_BOOK_INVENTORY, iEmptyPos));
            else if (pkItem->IsUpgradeItem())
                pkItem->AddToCharacter(ch, TItemPos(UPGRADE_ITEMS_INVENTORY, iEmptyPos));
            else if (pkItem->IsStone())
                pkItem->AddToCharacter(ch, TItemPos(STONE_INVENTORY, iEmptyPos));
            else if (pkItem->IsBox())
                pkItem->AddToCharacter(ch, TItemPos(BOX_INVENTORY, iEmptyPos));
            else if (pkItem->IsEfsun())
                pkItem->AddToCharacter(ch, TItemPos(EFSUN_INVENTORY, iEmptyPos));
            else if (pkItem->IsCicek())
                pkItem->AddToCharacter(ch, TItemPos(CICEK_INVENTORY, iEmptyPos));
#endif
            else
                pkItem->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
        }

        SendShopSafeboxGetItemDBPacket(ch->GetPlayerID(), dwItemID);
        return true;
    }

uyarlamayı yaptım build aldım artık pazarı bozunda k envanterine gelmesi gereken ürünler envantere gelmiyor ama k envanterinede gitmiyor ve şöyle bir sysr düşüyor
Kod:
SYSERR: Apr  7 17:25:10 :: SetItem: Invalid Inventory type 10
SYSERR: Apr  7 17:25:19 :: SetItem: Invalid Inventory type 10
SYSERR: Apr  7 17:27:02 :: SetItem: Invalid Inventory type 10
SYSERR: Apr  7 17:27:03 :: SetItem: Invalid Inventory type 10
SYSERR: Apr  7 17:27:33 :: SetItem: Invalid Inventory type 11
SYSERR: Apr  7 17:33:00 :: SetItem: Invalid Inventory type 13

galiba tanımlı olan envanteri bulamıyor bunun için ne yapmalıyım fikrin varmı :D
 
@hasanmacit
Kod:
    bool CShopManager::RecvShopSafeboxGetItemClientPacket(LPCHARACTER ch, DWORD dwItemID)
    {
        if (!ch || !ch->GetShopSafebox())
            return false;

        CShopSafebox* pkSafebox = ch->GetShopSafebox();
        CShopItem* pItem = nullptr;

        if (!pkSafebox->GetItem(dwItemID, &pItem))
            return false;

        LPITEM pkItem = pItem->CreateItem();
        if (!pkItem)
            return false;


        int iEmptyPos = -1;
        if (pkItem->IsDragonSoul())
            iEmptyPos = ch->GetEmptyDragonSoulInventory(pkItem);
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
    else if (pkItem->IsSkillBook())
    {
        iEmptyPos = ch->GetEmptySkillBookInventory(pkItem->GetSize());
    }
    else if (pkItem->IsUpgradeItem())
    {
        iEmptyPos = ch->GetEmptyUpgradeItemsInventory(pkItem->GetSize());
    }
    else if (pkItem->IsStone())
    {
        iEmptyPos = ch->GetEmptyStoneInventory(pkItem->GetSize());
    }
    else if (pkItem->IsBox())
    {
        iEmptyPos = ch->GetEmptyBoxInventory(pkItem->GetSize());
    }
    else if (pkItem->IsEfsun())
    {
        iEmptyPos = ch->GetEmptyEfsunInventory(pkItem->GetSize());
    }
    else if (pkItem->IsCicek())
    {
        iEmptyPos = ch->GetEmptyCicekInventory(pkItem->GetSize());
    }
#endif
        else
            iEmptyPos = ch->GetEmptyInventory(pkItem->GetSize());

        if (iEmptyPos == -1)
        {
            M2_DESTROY_ITEM(pkItem);
            return false;
        }

        // patch with warp check
        ch->SetOfflineShopUseTime();

        if (pkSafebox->RemoveItem(dwItemID))
        {
            pkSafebox->RefreshToOwner();
            if (pkItem->IsDragonSoul())
                pkItem->AddToCharacter(ch, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyPos));
#ifdef ENABLE_SPLIT_INVENTORY_SYSTEM
            else if (pkItem->IsSkillBook())
                pkItem->AddToCharacter(ch, TItemPos(SKILL_BOOK_INVENTORY, iEmptyPos));
            else if (pkItem->IsUpgradeItem())
                pkItem->AddToCharacter(ch, TItemPos(UPGRADE_ITEMS_INVENTORY, iEmptyPos));
            else if (pkItem->IsStone())
                pkItem->AddToCharacter(ch, TItemPos(STONE_INVENTORY, iEmptyPos));
            else if (pkItem->IsBox())
                pkItem->AddToCharacter(ch, TItemPos(BOX_INVENTORY, iEmptyPos));
            else if (pkItem->IsEfsun())
                pkItem->AddToCharacter(ch, TItemPos(EFSUN_INVENTORY, iEmptyPos));
            else if (pkItem->IsCicek())
                pkItem->AddToCharacter(ch, TItemPos(CICEK_INVENTORY, iEmptyPos));
#endif
            else
                pkItem->AddToCharacter(ch, TItemPos(INVENTORY, iEmptyPos));
        }

        SendShopSafeboxGetItemDBPacket(ch->GetPlayerID(), dwItemID);
        return true;
    }

uyarlamayı yaptım build aldım artık pazarı bozunda k envanterine gelmesi gereken ürünler envantere gelmiyor ama k envanterinede gitmiyor ve şöyle bir sysr düşüyor
Kod:
SYSERR: Apr  7 17:25:10 :: SetItem: Invalid Inventory type 10
SYSERR: Apr  7 17:25:19 :: SetItem: Invalid Inventory type 10
SYSERR: Apr  7 17:27:02 :: SetItem: Invalid Inventory type 10
SYSERR: Apr  7 17:27:03 :: SetItem: Invalid Inventory type 10
SYSERR: Apr  7 17:27:33 :: SetItem: Invalid Inventory type 11
SYSERR: Apr  7 17:33:00 :: SetItem: Invalid Inventory type 13

galiba tanımlı olan envanteri bulamıyor bunun için ne yapmalıyım fikrin varmı :D
bu cicek inventory felan navicattaki sqllere kayıtlı mı ? belki ondan bulamıyordur
 
navicatta item tablosuna design tableye gel orada window diye seçenek olucak içinde de enumlar olur işte inventory ground safebox felan diye oradaki sırayı commonda lenght.h ya da item_lenght.h ta window diye enum var oradaki sıraya göre düzenleyip tekrar dene
 
şükür halloldu envanterleri yanlış tanımlamısım offlineshopmanager.cpp :D
safeboxu hallettik item almayıda halledeyim konuyu güncelleyeceğim
dünden beri ne ugraştırdı ya
@hasanmacit
 
seninde baya yardımın oldu teşekkür ederim zamanını aldım baya <3
estağfurullah yardım etmek görevim ama çözüme ulaştıramadım. baya özgüvenli gelmiştim oysa ki :D ben burdan yazıyorum sen test edip dönüyorsun felan aradan geçen vakitte ne dediğimi unutuyorum. belki kodlar bende olsa uyarlayabilirdim ama sağlık olsun.
 
estağfurullah yardım etmek görevim ama çözüme ulaştıramadım. baya özgüvenli gelmiştim oysa ki :D ben burdan yazıyorum sen test edip dönüyorsun felan aradan geçen vakitte ne dediğimi unutuyorum. belki kodlar bende olsa uyarlayabilirdim ama sağlık olsun.
halloldu şükür. :D
konuyu güncelledim çözümü paylaştım konu kapatılabilir.
 
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst