Yardım grup item stacklama hakkında bilgisi olan varmı?

  • Konuyu açan Konuyu açan derdanelton
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 1
  • Gösterim Gösterim 52
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

derdanelton

Üye
Üye
Mesaj
4
Beğeni
2
Puan
40
Ticaret Puanı
0
grup toplama yaptım itemler dağılıyor gruptakilere fakat stacklemiyor ama kendi hesaba stacklıyor partye gidenlere itemleri hep stacklasın istiyorum
 
bool CHARACTER::PickupItem(DWORD dwVID) içinde koddaki ilk satırı arat buradaki gibi bir yorum satırı haline getirilmemiş boş slot arayan kodları görürsün orayı benim yaptığım gibi yorum satırına çevirip owner a AutoGiveItem ile gönderilmesini sağla, zaten AutoGiveItem itemde boş slot kontrolü var, eğer slot yoksa bile oyun otomatik olarak o oyuncunun adıyla yere itemi atar. kodları birebir alıp yapıştırma kendi dosyanı bozarsın düzgünce kontrol ederek sadece gerekli yerleri aktar.

char_item.cpp:
Genişlet Daralt Kopyala
        else if (!IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_GIVE | ITEM_ANTIFLAG_DROP) && GetParty())
        {
            // 다른 파티원 소유권 아이템을 주으려고 한다면
            NPartyPickupDistribute::FFindOwnership funcFindOwnership(item);

            GetParty()->ForEachOnlineMember(funcFindOwnership);

            LPCHARACTER owner = funcFindOwnership.owner;
            // @fixme115
            if (!owner)
                return false;

/*
            int iEmptyCell;
#ifdef ENABLE_SPECIAL_STORAGE
            if (item->IsUpgradeItem())
            {
                if (!(owner && (iEmptyCell = owner->GetEmptyUpgradeInventory(item)) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptyUpgradeInventory(item)) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("NO_EMPTY_SPACE_IN_INVENTORY"));
                        return false;
                    }
                }
            }
            else if (item->IsBook())
            {
                if (!(owner && (iEmptyCell = owner->GetEmptyBookInventory(item)) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptyBookInventory(item)) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("NO_EMPTY_SPACE_IN_INVENTORY"));
                        return false;
                    }
                }
            }
            else if (item->IsStone())
            {
                if (!(owner && (iEmptyCell = owner->GetEmptyStoneInventory(item)) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptyStoneInventory(item)) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("NO_EMPTY_SPACE_IN_INVENTORY"));
                        return false;
                    }
                }
            }
            else if (item->IsChest())
            {
                if (!(owner && (iEmptyCell = owner->GetEmptyChestInventory(item)) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptyChestInventory(item)) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("NO_EMPTY_SPACE_IN_INVENTORY"));
                        return false;
                    }
                }
            }
            else
#endif
            {
                if (!(owner && (iEmptyCell = owner->GetEmptyInventory(item->GetSize())) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptyInventory(item->GetSize())) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("소지하고 있는 아이템이 너무 많습니다."));
                        return false;
                    }
                }
            }
*/
            item->RemoveFromGround();
#ifdef ENABLE_SPECIAL_STORAGE
            if (item->IsUpgradeItem())
                // item->AddToCharacter(owner, TItemPos(UPGRADE_INVENTORY, iEmptyCell));
                owner->AutoGiveItem(item);
            else if (item->IsBook())
                // item->AddToCharacter(owner, TItemPos(BOOK_INVENTORY, iEmptyCell));
                owner->AutoGiveItem(item);
            else if (item->IsStone())
                // item->AddToCharacter(owner, TItemPos(STONE_INVENTORY, iEmptyCell));
                owner->AutoGiveItem(item);
            else if (item->IsChest())
                // item->AddToCharacter(owner, TItemPos(CHEST_INVENTORY, iEmptyCell));
                owner->AutoGiveItem(item);
#ifdef ENABLE_DRAGON_SOUL_SYSTEM
            else if (item->IsDragonSoul())
                // item->AddToCharacter(owner, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyCell));
                owner->AutoGiveItem(item);
#endif
            else
                // item->AddToCharacter(owner, TItemPos(INVENTORY, iEmptyCell));
                // item->AddToCharacter(owner, TItemPos(INVENTORY, iEmptyCell));
                owner->AutoGiveItem(item);
#else
#ifdef ENABLE_DRAGON_SOUL_SYSTEM
            if (item->IsDragonSoul())
                // item->AddToCharacter(owner, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyCell));
                owner->AutoGiveItem(item);
            else
#endif
            // item->AddToCharacter(owner, TItemPos(INVENTORY, iEmptyCell));
            owner->AutoGiveItem(item);
#endif

            char szHint[32+1];
            snprintf(szHint, sizeof(szHint), "%s %u %u", item->GetName(), item->GetCount(), item->GetVnum());
            LogManager::instance().ItemLog(owner, item, "GET", szHint);

            if (owner == this)
            {
#if defined(ENABLE_CHATTING_WINDOW_RENEWAL)
                ChatPacket(CHAT_TYPE_ITEM_INFO, LC_TEXT("아이템 획득: %s"), item->GetName());
#else
                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s"), item->GetName());
#endif
            }
            else
            {
#if defined(ENABLE_CHATTING_WINDOW_RENEWAL)
                owner->ChatPacket(CHAT_TYPE_ITEM_INFO, LC_TEXT("아이템 획득: %s 님으로부터 %s"), GetName(), item->GetName());
                ChatPacket(CHAT_TYPE_ITEM_INFO, LC_TEXT("아이템 전달: %s 님에게 %s"), owner->GetName(), item->GetName());
#else
                owner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 획득: %s 님으로부터 %s"), GetName(), item->GetName());
                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("아이템 전달: %s 님에게 %s"), owner->GetName(), item->GetName());
#endif
            }

            if (item->GetType() == ITEM_QUEST)
                quest::CQuestManager::instance().PickupItem (owner->GetPlayerID(), item);

            return true;
        }
 
En son bir moderatör tarafından düzenlenmiş:
Geri
Üst