Çözüldü Taş stacklemek için ufak bir kod yardımı.

  • Konuyu açan Konuyu açan Kaptan Yosun
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 4
  • Gösterim Gösterim 737
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ı.

Kaptan Yosun

Moderatör
Moderatör
Geliştirici
Yardımsever Üye
Mesaj
953
Çözümler
31
Beğeni
930
Puan
939
Ticaret Puanı
0
İyi akşamlar,

Sunucumda bütün taşları stacklenebilir yapmak istiyorum. Item proto'dan stackable flaglerini ayarladım. Komut ile stackli taş alabiliyorum. Char_item.cpp içinden remove item kodunu da itemden 1 eksilt ile değiştirdim. Yani eşyaya taş basıldığında tüm taşları silmek yerine 1 eksiltiyor.

Ancak sorun şu ki envanterde iki taşı üst üste sürüklediğimde "Bu taşı eklemek için slot yok" hatası alıyorum. Yani taşlar stacklenebilir ama sürükle bırak yöntemi taşları stacklemek yerine taşı diğer taşa eklemeye çalışıyor. Bunu nasıl çözebilirim?

char_item.cpp'deki taşlarla ilgili kısım:
Genişlet Daralt Kopyala
        case ITEM_METIN:
            {
                LPITEM item2;

                if (!IsValidItemPosition(DestCell) || !(item2 = GetItem(DestCell)))
                    return false;

                if (item2->IsExchanging())
                    return false;

                if (item2->GetType() == ITEM_PICK) return false;
                if (item2->GetType() == ITEM_ROD) return false;

                int i;

                for (i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
                {
                    DWORD dwVnum;   

                    if ((dwVnum = item2->GetSocket(i)) <= 2)
                        continue;

                    TItemTable * p = ITEM_MANAGER::instance().GetTable(dwVnum);

                    if (!p)
                        continue;

                    if (item->GetValue(5) == p->alValues[5])
                    {
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("같은 종류의 메틴석은 여러개 부착할 수 없습니다."));
                        return false;
                    }
                }
                if (item2->GetType() == ITEM_ARMOR)
                {
                    if (!IS_SET(item->GetWearFlag(), WEARABLE_BODY) || !IS_SET(item2->GetWearFlag(), WEARABLE_BODY))
                    {
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 메틴석은 장비에 부착할 수 없습니다."));
                        return false;
                    }
                }
                else if (item2->GetType() == ITEM_WEAPON)
                {
                    if (!IS_SET(item->GetWearFlag(), WEARABLE_WEAPON))
                    {
                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 메틴석은 무기에 부착할 수 없습니다."));
                        return false;
                    }
                }
                else
                {
                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("부착할 수 있는 슬롯이 없습니다."));
                    return false;
                }

                for (i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
                    if (item2->GetSocket(i) >= 1 && item2->GetSocket(i) <= 2 && item2->GetSocket(i) >= item->GetValue(2))
                    {
                        // 석 확률
                        if (number(1, 100) <= 30)
                        {
                            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("메틴석 부착에 성공하였습니다."));
                            item2->SetSocket(i, item->GetVnum());
                        }
                        else
                        {
                            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("메틴석 부착에 실패하였습니다."));
                            item2->SetSocket(i, ITEM_BROKEN_METIN_VNUM);
                        }

                        LogManager::instance().ItemLog(this, item2, "SOCKET", item->GetName());
                        item->SetCount(item->GetCount() - 1);
                        break;
                    }

                if (i == ITEM_SOCKET_MAX_NUM)
                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("부착할 수 있는 슬롯이 없습니다."));
            }
            break;
 
Bu python taraflı bi sorun. Sürüklenen item taş ise ve aynıysa birleştirmek için packet göndermeniz gerekli
 
Bu python taraflı bi sorun. Sürüklenen item taş ise ve aynıysa birleştirmek için packet göndermeniz gerekli
Teşekkür ederim fakat maalesef bu benim yeteneklerini aşıyor. Kod bilgim yok. Konu yine de açık dursun belki vakti olan biri örnek kod paylaşabilir
 
Teşekkür ederim fakat maalesef bu benim yeteneklerini aşıyor. Kod bilgim yok. Konu yine de açık dursun belki vakti olan biri örnek kod paylaşabilir

Denediğin taşın item_proto.txt içindeki satırı,
root/uiinventory.py atabilirsen göz gezdirebilirim
 
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Üst