Çözüldü Üzerine sürükleyince çalıştırma kodu?

  • Konuyu açan Konuyu açan TheAdmin33
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 23
  • Gösterim Gösterim 1K
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ı.

TheAdmin33

Ah, bu şarkıların gözü kör olsun
Geliştirici
Yardımsever Üye
Usta Üye
Editör
Mesaj
1.045
Çözümler
60
Beğeni
2.675
Puan
1.849
Ticaret Puanı
0
bir tane USE_SPECIAL item oluşturdum bu itemin kuşağın üstüne sürüklenince çalışmasını istiyorum ama iteme sağ tık yaparsam çalışıyor onu nasıl üzerinine sürükleyince çalışacak şekilde ayarlarım?

char_item.cpp:
Genişlet Daralt Kopyala
                    case USE_SPECIAL:
                        switch (item->GetVnum())
                        {
                            case 71500:
                            {
                                if ((item->GetType() == ITEM_COSTUME) && (item->GetSubType() == COSTUME_ACCE))
                                {
                                    item->SetSocket(2, 1);
                                    item->SetCount(item->GetCount() - 1);
                                }
                                else
                                {
                                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Bu öğe sadece kuşaklara özeldir."));
                                }
                            }
                                break;
 
Son düzenleme:
Çözüm
1695570416661.png

üstteki kırmızı işaretli yerlerden
1. olan itemin direk kullanılmasını enngelleyip sürükle bırak yapmanı sağlıyor.
2. ve 3. olanlar istediğin türdeki item haricinde kullanılmasını istemiyorsan engellemek için

item use kodunun içerisinde bu olarak yoksa sağ tık kullan yaparlar.
C++:
Genişlet Daralt Kopyala
                                if (!IsValidItemPosition(DestCell) || !(item2 = GetItem(DestCell)))
                                    return false;


client tarafı bu şekilde olacak. kendine göre düzenlersin
Python:
Genişlet Daralt Kopyala
uiinventory.py

//Bul
        elif item.GetUseType(srcItemVID) in self.USE_TYPE_TUPLE:
            self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)
//Altına ekle:
        elif app.ENABLE_EXTENDING_COSTUME_TIME and...
az bir yazı vardı bunu yapınca onlarda gitti artık hiçbir şey yazmıyor :D
reboot attım baktım socket2 ler 1 olmuş ama rebootlamadan değişmiyor bu normalmi?
son kısmı eklemezsem sıkıntı kalmıyor.Tek eksik itemi kuşağa sürükleyince sarı gözükmesi gerekiyor ama kırmızı gözüküyor bunun çözümünü bilen yoksa ve
Eğer item tablosunun geç güncellenmesi normal ise konu neticeye kavuşmuş demektir. Vakit ayırıp yardım ettikleri için @Kaiser ve @nyami 'ye çok çok teşekkürler.

C++:
Genişlet Daralt Kopyala
// EKLENEN KODLAR

                    if(item->GetVnum() == ESYANIN_KODU)
                    {
                        if ((item2->GetType() == ITEM_COSTUME) && (item2->GetSubType() == COSTUME_ACCE))
                        {
                            item2->SetSocket(2, 1);
                            item->SetCount(item->GetCount() - 1);
                            return;
                        }
                        else
                        {
                            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Bu öğe sadece kuşaklara özeldir."));
                            return;
                        }
                    }

                    // EKLENEN KODLAR - SON

Bu şekilde return; kısımlarını eklemeyi dene
bunu da merak ettim yarın denicem bugünlük benden bu kadar.

CctghrmW8AAeI_d.jpg
 
az bir yazı vardı bunu yapınca onlarda gitti artık hiçbir şey yazmıyor :D
reboot attım baktım socket2 ler 1 olmuş ama rebootlamadan değişmiyor bu normalmi?
aslında yaptığımız şu eğer bu item kostüm ve kuşak olan bir sisteme sürüklenirse işlem yap. aksi olayın neyden tetiklendiğini düşünüyorum ama aklıma mantıklı bir şey gelmiyor
 
C++:
Genişlet Daralt Kopyala
// EKLENEN KODLAR

                    if(item->GetVnum() == ESYANIN_KODU)
                    {
                        if ((item2->GetType() == ITEM_COSTUME) && (item2->GetSubType() == COSTUME_ACCE))
                        {
                            item2->SetSocket(2, 1);
                            item->SetCount(item->GetCount() - 1);
                            return;
                        }
                        else
                        {
                            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Bu öğe sadece kuşaklara özeldir."));
                            return;
                        }
                    }

                    // EKLENEN KODLAR - SON

Bu şekilde return; kısımlarını eklemeyi dene
Bunu denedim oluyor fakat şöyle bir sorun oluyor item_costume engelinden kuşağı kaldırınca normal efsun nesnesiyle efsun atılabilir hale geliyor.

kodu biraz daha değiştirdim de doğru birşeymi yaptım bilemedim . Kod kalabalığı olmasın diye yeni subtype oluştursam if sorgusuyla item koduna göre işlem yaptırsam olurmu. Derleyip oluyormu diye kontrol etmedim

char_item.cpp:
Genişlet Daralt Kopyala
#ifdef ACCE_NEW_ITEM
                    case ACCE_NEW_ITEM:
#endif

                    case USE_SPECIAL:
                        switch (item->GetVnum())
                        {
#ifdef ACCE_NEW_ITEM
                            switch (item->GetSubType())
                            {
                                case ACCE_NEW_ITEM:
                                    {

                                        LPITEM item2;

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

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

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

                                        if ((item2->GetType() != ITEM_COSTUME) && (item2->GetSubType() != COSTUME_ACCE))
                                        {
                                            ChatPacket(CHAT_TYPE_INFO, "Bu öğe kuşaklara özeldir.");
                                            return false;
                                        }

                                        if (item2->GetValue(ACCE_GRADE_VALUE_FIELD) != 4)
                                        {
                                            ChatPacket(CHAT_TYPE_INFO, "Bu öğe sadece 11 emiş ve üzeri kuşaklara özeldir.");
                                            return false;
                                        }

                                        if (item->GetVnum() == 71500)
                                        {
                                            item2->SetSocket(ACCE_BOOSTER_SOCKET, 1);
                                            ChatPacket(CHAT_TYPE_INFO, "Yeni bonus emiş sınırı:");
                                            item->SetCount(item->GetCount() - 1);
                                        }

                                        if (item->GetVnum() == 71501)
                                        {
                                            item2->SetSocket(ACCE_BOOSTER_SOCKET, 2);
                                            ChatPacket(CHAT_TYPE_INFO, "Yeni bonus emiş sınırı:");
                                            item->SetCount(item->GetCount() - 1);
                                        }

                                    }

                            }
#endif
 
kodu USE_CHANGE_ATTRIBUTE kısmına taşıdım.
item_kostum engeli kısmını şu şekilde değiştirdim;
char_item.cpp:
Genişlet Daralt Kopyala
                            if (item2->GetType() == ITEM_COSTUME)
                            {
                                if (item2->GetSubType() == COSTUME_ACCE)
                                {
                                    if (item->GetSubType() != USE_CHANGE_ATTRIBUTE)
                                    {
                                        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼Ó¼ºÀ» º¯°æÇÒ ¼ö ¾ø´Â ¾ÆÀÌÅÛÀÔ´Ï´Ù."));
                                        return false;
                                    }
                                }
                                else
                                {
                                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼Ó¼ºÀ» º¯°æÇÒ ¼ö ¾ø´Â ¾ÆÀÌÅÛÀÔ´Ï´Ù."));
                                    return false;
                                }
                            }

kodu ise şu şekilde değiştirdim;
char_item.cpp:
Genişlet Daralt Kopyala
                                case USE_CHANGE_ATTRIBUTE :
#ifdef ACCE_BONUS_BOOSTER
                                    if ((ITEM_COSTUME == item2->GetType()) && (item2->GetSubType() == COSTUME_ACCE))
                                    {
                                        if (item->GetVnum() >= 71500 && item->GetVnum() <= 71505)
                                        {
                                            if (item2->GetValue(ACCE_GRADE_VALUE_FIELD) != 4)
                                            {
                                                ChatPacket(CHAT_TYPE_INFO, "Bu öğe sadece 11 emiş ve üzeri kuşaklara özeldir.");
                                                return false;
                                            }
                                            else
                                            {
                                                if (item->GetVnum() == 71500)
                                                {
                                                    item2->SetSocket(ACCE_BOOSTER_SOCKET, 1);
                                                    ChatPacket(CHAT_TYPE_INFO, "Yeni bonus emiş sınırı:");
                                                    item->SetCount(item->GetCount() - 1);
                                                    return false;
                                                }

                                                if (item->GetVnum() == 71501)
                                                {
                                                    item2->SetSocket(ACCE_BOOSTER_SOCKET, 2);
                                                    ChatPacket(CHAT_TYPE_INFO, "Yeni bonus emiş sınırı:");
                                                    item->SetCount(item->GetCount() - 1);
                                                    return false;
                                                }
                                            }
                                        }
                                        else
                                        {
                                            ChatPacket(CHAT_TYPE_INFO, "Bu öğeyi kuşaklar için kullanamazsınız.");
                                            return false;
                                        }
                                    }
#endif

istenmiyen bir durumlada karşılaşmadım çok güzel bir şekilde çalışıyor.

geriye kalan eksikler;
item_lenght deki değişkeni oyun içi sohbet satırında yazdırma.(Yeni bonus emiş sınırı:100 gibi)
kuşağın emiş seviyesi kontrolü (mevcut seviyesinden daha düşük bir seviye inmemesi ve seviyelerin bir bir artması vs.)


Not:Sistemi bitirebilirsem forumda ücretsiz paylaşıcam.
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Üst