Çö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...
Efsun nesnesi/yeşil efsun nesnesi kodlarını inceleyerek yapabilirsin.
 
Efsun nesnesi/yeşil efsun nesnesi kodlarını inceleyerek yapabilirsin.

bunlarımı eklemem gerek:
Genişlet Daralt Kopyala
                            if (!IsValidItemPosition(DestCell))
                                return false;

                            LPITEM item2 = GetItem(DestCell);

                            if (!item2)
                                return false;

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

                            if (item2->IsEquipped())
                                return false;
 
bunlarımı eklemem gerek:
Genişlet Daralt Kopyala
                            if (!IsValidItemPosition(DestCell))
                                return false;

                            LPITEM item2 = GetItem(DestCell);

                            if (!item2)
                                return false;

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

                            if (item2->IsEquipped())
                                return false;
Hayır kullandığın case bloğu yanlış.
case USE_ADD_ACCESSORY_SOCKET: veya case USE_CHANGE_ATTRIBUTE2: gibi case'leri kullanabilirsin.
İtemin type/subtype değerini de bu case lere göre düzenlemen gerek.

char_item.cpp de şu kısmı bul:
C++:
Genişlet Daralt Kopyala
case USE_ADD_ACCESSORY_SOCKET:
            {
                char buf[21];
                snprintf(buf, sizeof(buf), "%u", item2->GetID());

                if (item2->IsAccessoryForSocket())
                {

Ve şu şekilde düzenleyip dene:
C++:
Genişlet Daralt Kopyala
            case USE_ADD_ACCESSORY_SOCKET:
            {
                char buf[21];
                snprintf(buf, sizeof(buf), "%u", item2->GetID());

                if (item2->IsAccessoryForSocket())
                {
                    // 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);
                        }
                        else
                        {
                            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Bu öğe sadece kuşaklara özeldir."));
                        }
                    }   
                    // EKLENEN KODLAR - SON

Bu sadece bir örnek, itemin amacına göre uygun case bloğunu kullanabilirsin.
 
item protoyu da değiştirmem gerek değilmi
böyleydi;
item_proto:
Genişlet Daralt Kopyala
71500    Kuşak Bonus Arttırıcı    ITEM_USE    USE_SPECIAL    1    NONE    LOG    NONE    NONE    0    0    0    0    0    LIMIT_NONE    0    LIMIT_NONE    0    APPLY_NONE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    0    0    0    0    0    0

böylemi olacak;
item_proto:
Genişlet Daralt Kopyala
71500    Kuşak Bonus Arttırıcı    ITEM_USE    USE_CHANGE_ATTRIBUTE    1    NONE    LOG    NONE        0    0    0    0    0    LIMIT_NONE    0    LIMIT_NONE    0    APPLY_NONE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    0    0    0    0    0    0
 
item protoyu da değiştirmem gerek değilmi
böyleydi;
item_proto:
Genişlet Daralt Kopyala
71500    Kuşak Bonus Arttırıcı    ITEM_USE    USE_SPECIAL    1    NONE    LOG    NONE    NONE    0    0    0    0    0    LIMIT_NONE    0    LIMIT_NONE    0    APPLY_NONE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    0    0    0    0    0    0

böylemi olacak;
item_proto:
Genişlet Daralt Kopyala
71500    Kuşak Bonus Arttırıcı    ITEM_USE    USE_CHANGE_ATTRIBUTE    1    NONE    LOG    NONE        0    0    0    0    0    LIMIT_NONE    0    LIMIT_NONE    0    APPLY_NONE    0    APPLY_NONE    0    APPLY_NONE    0    0    0    0    0    0    0    0    0    0
USE_CHANGE_ATTRIBUTE case'ini kullandıysan evet böyle olacak.
Kullandığın case bloğuna göre item_proto da zaten bir çok hazır item satırı mevcut. Onlardan örnek alabilirsin.
(Arttırma kağıdı,efsun nesnesi, elmas gibi..)
 
USE_CHANGE_ATTRIBUTE case'ini kullandıysan evet böyle olacak.
Kullandığın case bloğuna göre item_proto da zaten bir çok hazır item satırı mevcut. Onlardan örnek alabilirsin.
(Arttırma kağıdı,efsun nesnesi, elmas gibi..)
bu eşyanın yükseltmesini değiştiremessin diyor kostümler için engel var galiba ondan olmuyor o engeli kaldırmakta sıkıntı çıkarır herhalde(benim kuşak sistemi kostüm olarak ekli)

kuşak emiş silme iteminin protosuna baktım case USE_DETACHMENT içine eklenmiş bende buraya eklesem olurmu?
 
bu eşyanın yükseltmesini değiştiremessin diyor kostümler için engel var galiba ondan olmuyor o engeli kaldırmakta sıkıntı çıkarır herhalde(benim kuşak sistemi kostüm olarak ekli)

kuşak emiş silme iteminin protosuna baktım case USE_DETACHMENT içine eklenmiş bende buraya eklesem olurmu?
bnu yapıncada sökülecek cevher yok diyor :(
 
bnu yapıncada sökülecek cevher yok diyor :(
USE_CHANGE_ATTRIBUTE içinde kostümler için zaten şöyle bir engel var;

C++:
Genişlet Daralt Kopyala
if (ITEM_COSTUME == item2->GetType())
{
    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼Ó¼ºÀ» º¯°æÇÒ ¼ö ¾ø´Â ¾ÆÀÌÅÛÀÔ´Ï´Ù."));
    return false;
}

Bunu şu şekilde değiştirip deneyebilirsin:
C++:
Genişlet Daralt Kopyala
if (ITEM_COSTUME == item2->GetType() && item2->GetSubType() != COSTUME_ACCE)
{
    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼Ó¼ºÀ» º¯°æÇÒ ¼ö ¾ø´Â ¾ÆÀÌÅÛÀÔ´Ï´Ù."));
    return false;
}
 
USE_CHANGE_ATTRIBUTE içinde kostümler için zaten şöyle bir engel var;

C++:
Genişlet Daralt Kopyala
if (ITEM_COSTUME == item2->GetType())
{
    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼Ó¼ºÀ» º¯°æÇÒ ¼ö ¾ø´Â ¾ÆÀÌÅÛÀÔ´Ï´Ù."));
    return false;
}

Bunu şu şekilde değiştirip deneyebilirsin:
C++:
Genişlet Daralt Kopyala
if (ITEM_COSTUME == item2->GetType() && item2->GetSubType() != COSTUME_ACCE)
{
    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼Ó¼ºÀ» º¯°æÇÒ ¼ö ¾ø´Â ¾ÆÀÌÅÛÀÔ´Ï´Ù."));
    return false;
}
bu seferde kuşağa efsun atıyormuş gibi oluyor. küpeye kalkana efsun atıyormuş gibi oldu. Çok garip bir şey oldu kuşağın emiş oranına göre efsun oranı veriyor normal de %20 oaranında efsun veriyorken kuşağın emiş oranından dolayı daha yüksek veriyor. Uğraşıp dururken ayrı bir sistem çıkardık ortaya :D
 
bu seferde kuşağa efsun atıyormuş gibi oluyor. küpeye kalkana efsun atıyormuş gibi oldu. Çok garip bir şey oldu kuşağın emiş oranına göre efsun oranı veriyor normal de %20 oaranında efsun veriyorken kuşağın emiş oranından dolayı daha yüksek veriyor. Uğraşıp dururken ayrı bir sistem çıkardık ortaya :D
benim istediğim oldu socket2 değerini 1 yapmak istiyordum oldu ama efsun atmaması lazım onu nasıl engellicem?
 
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 player.GetItemIndex(srcItemSlotPos) >= 84012 and player.GetItemIndex(srcItemSlotPos) <= 84016:
            self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)
//Bul
        elif (player.GetItemFlags(srcSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
            return True
//Altına ekle
        elif app.ENABLE_EXTENDING_COSTUME_TIME and  player.GetItemIndex(srcSlotPos) >= 84012 and player.GetItemIndex(srcSlotPos) <= 84016:
                return True
//Bul:
        elif item.IsKey(srcItemVNum):
            if player.CanUnlock(srcItemVNum, dstSlotPos):
                return True
//Altına ekle:
        elif app.ENABLE_EXTENDING_COSTUME_TIME and player.GetItemIndex(srcSlotPos) >= 84012 and player.GetItemIndex(srcSlotPos) <= 84016:
            item.SelectItem(player.GetItemIndex(dstSlotPos))
            if item.GetItemType() == item.ITEM_TYPE_COSTUME and itemSubType != item.COSTUME_TYPE_SASH:
                return True
 
Çözüm
13784 eklentisini görüntüle
ü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 player.GetItemIndex(srcItemSlotPos) >= 84012 and player.GetItemIndex(srcItemSlotPos) <= 84016:
            self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)
//Bul
        elif (player.GetItemFlags(srcSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
            return True
//Altına ekle
        elif app.ENABLE_EXTENDING_COSTUME_TIME and  player.GetItemIndex(srcSlotPos) >= 84012 and player.GetItemIndex(srcSlotPos) <= 84016:
                return True
//Bul:
        elif item.IsKey(srcItemVNum):
            if player.CanUnlock(srcItemVNum, dstSlotPos):
                return True
//Altına ekle:
        elif app.ENABLE_EXTENDING_COSTUME_TIME and player.GetItemIndex(srcSlotPos) >= 84012 and player.GetItemIndex(srcSlotPos) <= 84016:
            item.SelectItem(player.GetItemIndex(dstSlotPos))
            if item.GetItemType() == item.ITEM_TYPE_COSTUME and itemSubType != item.COSTUME_TYPE_SASH:
                return True
itemi kuşağa sürüklediğimde hiçbir şey olmuyor. kodun son hali bu;

char_item.cpp:
Genişlet Daralt Kopyala
                    case USE_SPECIAL:
                        switch (item->GetVnum())
                        {
                            case 71500:
                                {
                                    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)
                                    {
                                        item2->SetSocket(ACCE_BOOSTER_SOCKET, 1);
                                        item->SetCount(item->GetCount() - 1);
                                    }
                                    else
                                    {
                                        ChatPacket(CHAT_TYPE_INFO, "Bu öğe sadece 11 emiş ve üzeri kuşaklara özeldir.");
                                    }
                                }
                                break;
 
itemi kuşağa sürüklediğimde hiçbir şey olmuyor. kodun son hali bu;

char_item.cpp:
Genişlet Daralt Kopyala
                    case USE_SPECIAL:
                        switch (item->GetVnum())
                        {
                            case 71500:
                                {
                                    LPITEM item2;
                                        ChatPacket(CHAT_TYPE_INFO, "girdi 1");
                                    if (!IsValidItemPosition(DestCell) || !(item2 = GetItem(DestCell)))
                                        return false;
                                        ChatPacket(CHAT_TYPE_INFO, "girdi 2");
                                    if (item2->IsExchanging())
                                        return false;
                                        ChatPacket(CHAT_TYPE_INFO, "girdi 3");
                                    if (item2->IsEquipped())
                                        return false;
                                        ChatPacket(CHAT_TYPE_INFO, "girdi 4");
                                    if ((item2->GetType() != ITEM_COSTUME) && (item2->GetSubType() != COSTUME_ACCE))
                                    {
                                        ChatPacket(CHAT_TYPE_INFO, "Bu öğe kuşaklara özeldir.");
                                        return false;
                                    }
                                        ChatPacket(CHAT_TYPE_INFO, "girdi 5");
                                    if (item2->GetValue(ACCE_GRADE_VALUE_FIELD) == 4)
                                    {
                                        item2->SetSocket(ACCE_BOOSTER_SOCKET, 1);
                                        item->SetCount(item->GetCount() - 1);
                                    }
                                    else
                                    {
                                        ChatPacket(CHAT_TYPE_INFO, "Bu öğe sadece 11 emiş ve üzeri kuşaklara özeldir.");
                                    }
                                }
                                break;

şunu yapalım üstte düzenledim kodu. nerede takılıyor bakalım. bide root a attığım kodun son halini atar mısın.
 
şunu yapalım üstte düzenledim kodu. nerede takılıyor bakalım. bide root a attığım kodun son halini atar mısın.
client trafını da ekleyince kod çalıştı ama socket2 yi 1 yapmıyor. sadece info yazısı çıkıyor ve itemi üzerine getirdiğimde bilgilerini göstermiyor (emiş oranını emdirilmiş olan efsunları).

uiinventory.py:
Genişlet Daralt Kopyala
    def __DropSrcItemToDestItemInInventory(self, srcItemVID, srcItemSlotPos, dstItemSlotPos):
        if srcItemSlotPos == dstItemSlotPos:
            return
               
        elif item.IsRefineScroll(srcItemVID):
            self.RefineItem(srcItemSlotPos, dstItemSlotPos)
            self.wndItem.SetUseMode(False)

        elif item.IsMetin(srcItemVID):
            self.AttachMetinToItem(srcItemSlotPos, dstItemSlotPos)

        elif item.IsDetachScroll(srcItemVID):
            self.DetachMetinFromItem(srcItemSlotPos, dstItemSlotPos)

        elif item.IsKey(srcItemVID):
            self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)          

        elif (player.GetItemFlags(srcItemSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
            self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)

        elif item.GetUseType(srcItemVID) in self.USE_TYPE_TUPLE:
            self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)          

        elif player.GetItemIndex(srcItemSlotPos) == 71500:
            self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos)

        else:
            #snd.PlaySound("sound/ui/drop.wav")

            ## À̵¿½ÃŲ °÷ÀÌ ÀåÂø ½½·ÔÀÏ °æ¿ì ¾ÆÀÌÅÛÀ» »ç¿ëÇؼ ÀåÂø ½ÃŲ´Ù - [levites]
            if player.IsEquipmentSlot(dstItemSlotPos):

                ## µé°í ÀÖ´Â ¾ÆÀÌÅÛÀÌ ÀåºñÀ϶§¸¸
                if item.IsEquipmentVID(srcItemVID):
                    self.__UseItem(srcItemSlotPos)

            else:
                self.__SendMoveItemPacket(srcItemSlotPos, dstItemSlotPos, 0)
                #net.SendItemMovePacket(srcItemSlotPos, dstItemSlotPos, 0)

    def __SellItem(self, itemSlotPos):
        if not player.IsEquipmentSlot(itemSlotPos):
            self.sellingSlotNumber = itemSlotPos
            itemIndex = player.GetItemIndex(itemSlotPos)
            itemCount = player.GetItemCount(itemSlotPos)
           
           
            self.sellingSlotitemIndex = itemIndex
            self.sellingSlotitemCount = itemCount

            item.SelectItem(itemIndex)
            ## ¾ÈƼ Ç÷¹±× °Ë»ç ºüÁ®¼ Ãß°¡
            ## 20140220
            if item.IsAntiFlag(item.ANTIFLAG_SELL):
                popup = uiCommon.PopupDialog()
                popup.SetText(localeInfo.SHOP_CANNOT_SELL_ITEM)
                popup.SetAcceptEvent(self.__OnClosePopupDialog)
                popup.Open()
                self.popup = popup
                return

            itemPrice = item.GetISellItemPrice()

            if item.Is1GoldItem():
                itemPrice = itemCount / itemPrice / 5
            else:
                itemPrice = itemPrice * itemCount / 5

            item.GetItemName(itemIndex)
            itemName = item.GetItemName()

            self.questionDialog = uiCommon.QuestionDialog()
            self.questionDialog.SetText(localeInfo.DO_YOU_SELL_ITEM(itemName, itemCount, itemPrice))
            self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.SellItem))
            self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
            self.questionDialog.Open()
            self.questionDialog.count = itemCount
       
            constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1)

    def __OnClosePopupDialog(self):
        self.pop = None

    def RefineItem(self, scrollSlotPos, targetSlotPos):

        scrollIndex = player.GetItemIndex(scrollSlotPos)
        targetIndex = player.GetItemIndex(targetSlotPos)

        if player.REFINE_OK != player.CanRefine(scrollIndex, targetSlotPos):
            return
        if app.ENABLE_REFINE_RENEWAL:
            constInfo.AUTO_REFINE_TYPE = 1
            constInfo.AUTO_REFINE_DATA["ITEM"][0] = scrollSlotPos
            constInfo.AUTO_REFINE_DATA["ITEM"][1] = targetSlotPos

        ###########################################################
        self.__SendUseItemToItemPacket(scrollSlotPos, targetSlotPos)
        #net.SendItemUseToItemPacket(scrollSlotPos, targetSlotPos)
        return
        ###########################################################

        ###########################################################
        #net.SendRequestRefineInfoPacket(targetSlotPos)
        #return
        ###########################################################

        result = player.CanRefine(scrollIndex, targetSlotPos)

        if player.REFINE_ALREADY_MAX_SOCKET_COUNT == result:
            #snd.PlaySound("sound/ui/jaeryun_fail.wav")
            chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NO_MORE_SOCKET)

        elif player.REFINE_NEED_MORE_GOOD_SCROLL == result:
            #snd.PlaySound("sound/ui/jaeryun_fail.wav")
            chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NEED_BETTER_SCROLL)

        elif player.REFINE_CANT_MAKE_SOCKET_ITEM == result:
            #snd.PlaySound("sound/ui/jaeryun_fail.wav")
            chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_SOCKET_DISABLE_ITEM)

        elif player.REFINE_NOT_NEXT_GRADE_ITEM == result:
            #snd.PlaySound("sound/ui/jaeryun_fail.wav")
            chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_UPGRADE_DISABLE_ITEM)

        elif player.REFINE_CANT_REFINE_METIN_TO_EQUIPMENT == result:
            chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_EQUIP_ITEM)

        if player.REFINE_OK != result:
            return

        self.refineDialog.Open(scrollSlotPos, targetSlotPos)

    def DetachMetinFromItem(self, scrollSlotPos, targetSlotPos):
        scrollIndex = player.GetItemIndex(scrollSlotPos)
        targetIndex = player.GetItemIndex(targetSlotPos)
        if not player.CanDetach(scrollIndex, targetSlotPos):
            if app.ENABLE_ACCE_SYSTEM:
                item.SelectItem(scrollIndex)
                if item.GetValue(0) == acce.CLEAN_ATTR_VALUE0:
                    chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.ACCE_FAILURE_CLEAN)
                else:
                    chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_METIN_INSEPARABLE_ITEM)
            else:
                chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_METIN_INSEPARABLE_ITEM)
            return

        self.questionDialog = uiCommon.QuestionDialog()
        self.questionDialog.SetText(localeInfo.REFINE_DO_YOU_SEPARATE_METIN)
        if app.ENABLE_ACCE_SYSTEM:
            item.SelectItem(targetIndex)
            if item.GetItemType() == item.ITEM_TYPE_COSTUME and item.GetItemSubType() == item.COSTUME_TYPE_ACCE:
                item.SelectItem(scrollIndex)
                if item.GetValue(0) == acce.CLEAN_ATTR_VALUE0:
                    self.questionDialog.SetText(localeInfo.ACCE_DO_YOU_CLEAN)
       
        self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.OnDetachMetinFromItem))
        self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog))
        self.questionDialog.Open()
        self.questionDialog.sourcePos = scrollSlotPos
        self.questionDialog.targetPos = targetSlotPos

    def AttachMetinToItem(self, metinSlotPos, targetSlotPos):
        metinIndex = player.GetItemIndex(metinSlotPos)
        targetIndex = player.GetItemIndex(targetSlotPos)

        item.SelectItem(metinIndex)
        itemName = item.GetItemName()

        result = player.CanAttachMetin(metinIndex, targetSlotPos)

        if player.ATTACH_METIN_NOT_MATCHABLE_ITEM == result:
            chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_CAN_NOT_ATTACH(itemName))

        if player.ATTACH_METIN_NO_MATCHABLE_SOCKET == result:
            chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NO_SOCKET(itemName))

        elif player.ATTACH_METIN_NOT_EXIST_GOLD_SOCKET == result:
            chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_NO_GOLD_SOCKET(itemName))

        elif player.ATTACH_METIN_CANT_ATTACH_TO_EQUIPMENT == result:
            chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.REFINE_FAILURE_EQUIP_ITEM)

        if player.ATTACH_METIN_OK != result:
            return

        self.attachMetinDialog.Open(metinSlotPos, targetSlotPos)


       
    def OverOutItem(self):
        self.wndItem.SetUsableItem(False)
        if None != self.tooltipItem:
            self.tooltipItem.HideToolTip()

    def OverInItem(self, overSlotPos):
        overSlotPosGlobal = self.__InventoryLocalSlotPosToGlobalSlotPos(overSlotPos)
        self.wndItem.SetUsableItem(False)

        if app.ENABLE_HIGHLIGHT_NEW_ITEM and overSlotPosGlobal in self.liHighlightedItems:
            self.liHighlightedItems.remove(overSlotPosGlobal)
            self.wndItem.DeactivateSlot(overSlotPos)

        if mouseModule.mouseController.isAttached():
            attachedItemType = mouseModule.mouseController.GetAttachedType()
            if app.WJ_SPLIT_INVENTORY_SYSTEM:
                if player.SLOT_TYPE_INVENTORY == attachedItemType or player.SLOT_TYPE_STONE_INVENTORY == attachedItemType or player.SLOT_TYPE_EFSUN_INVENTORY == attachedItemType:
                    attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
                    attachedItemVNum = mouseModule.mouseController.GetAttachedItemIndex()

                    if attachedItemVNum==player.ITEM_MONEY: # @fixme005
                        pass
                    elif self.__CanUseSrcItemToDstItem(attachedItemVNum, attachedSlotPos, overSlotPosGlobal):
                        self.wndItem.SetUsableItem(True)
                        self.wndItem.SetUseMode(True)
                        self.ShowToolTip(overSlotPosGlobal)
                        return
            else:
                if player.SLOT_TYPE_INVENTORY == attachedItemType:

                    attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
                    attachedItemVNum = mouseModule.mouseController.GetAttachedItemIndex()

                    if attachedItemVNum==player.ITEM_MONEY: # @fixme005
                        pass
                    elif self.__CanUseSrcItemToDstItem(attachedItemVNum, attachedSlotPos, overSlotPosGlobal):
                        self.wndItem.SetUsableItem(True)
                        self.ShowToolTip(overSlotPosGlobal)
                        return

        self.ShowToolTip(overSlotPosGlobal)


    def __IsUsableItemToItem(self, srcItemVNum, srcSlotPos):
        "´Ù¸¥ ¾ÆÀÌÅÛ¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ¾ÆÀÌÅÛÀΰ¡?"

        if item.IsRefineScroll(srcItemVNum):
            return True
        elif item.IsMetin(srcItemVNum):
            return True
        elif item.IsDetachScroll(srcItemVNum):
            return True
        elif item.IsKey(srcItemVNum):
            return True
        elif (player.GetItemFlags(srcSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
            return True

        elif player.GetItemIndex(srcSlotPos) == 71500:
                return True

        else:
            if item.GetUseType(srcItemVNum) in self.USE_TYPE_TUPLE:
                return True
           
        return False

    def __CanUseSrcItemToDstItem(self, srcItemVNum, srcSlotPos, dstSlotPos):
        "´ë»ó ¾ÆÀÌÅÛ¿¡ »ç¿ëÇÒ ¼ö Àִ°¡?"

        if srcSlotPos == dstSlotPos:
            return False

        if item.IsRefineScroll(srcItemVNum):
            if player.REFINE_OK == player.CanRefine(srcItemVNum, dstSlotPos):
                return True
        elif item.IsMetin(srcItemVNum):
            if player.ATTACH_METIN_OK == player.CanAttachMetin(srcItemVNum, dstSlotPos):
                return True
        elif item.IsDetachScroll(srcItemVNum):
            if player.DETACH_METIN_OK == player.CanDetach(srcItemVNum, dstSlotPos):
                return True
        elif item.IsKey(srcItemVNum):
            if player.CanUnlock(srcItemVNum, dstSlotPos):
                return True

        elif player.GetItemIndex(srcSlotPos) == 71500:
            item.SelectItem(player.GetItemIndex(dstSlotPos))
            if item.GetItemType() == item.ITEM_TYPE_COSTUME and itemSubType != item.COSTUME_TYPE_ACCE:
                return True

        elif (player.GetItemFlags(srcSlotPos) & ITEM_FLAG_APPLICABLE) == ITEM_FLAG_APPLICABLE:
            return True

        else:
            useType=item.GetUseType(srcItemVNum)

            if "USE_CLEAN_SOCKET" == useType:
                if self.__CanCleanBrokenMetinStone(dstSlotPos):
                    return True
            elif "USE_CHANGE_ATTRIBUTE" == useType:
                if self.__CanChangeItemAttrList(dstSlotPos):
                    return True
            elif "USE_ADD_ATTRIBUTE" == useType:
                if self.__CanAddItemAttr(dstSlotPos):
                    return True
            elif "USE_ADD_ATTRIBUTE2" == useType:
                if self.__CanAddItemAttr(dstSlotPos):
                    return True
            elif "USE_ADD_ACCESSORY_SOCKET" == useType:
                if self.__CanAddAccessorySocket(dstSlotPos):
                    return True
            elif "USE_PUT_INTO_ACCESSORY_SOCKET" == useType:                              
                if self.__CanPutAccessorySocket(dstSlotPos, srcItemVNum):
                    return TRUE;
            elif "USE_PUT_INTO_BELT_SOCKET" == useType:                              
                dstItemVNum = player.GetItemIndex(dstSlotPos)
                print "USE_PUT_INTO_BELT_SOCKET", srcItemVNum, dstItemVNum
                item.SelectItem(dstItemVNum)
                if item.ITEM_TYPE_BELT == item.GetItemType():
                    return True
            if app.ENABLE_ITEM_ATTR_UPDATE:
                if "USE_UPDATE_ATTRIBUTE" == useType:
                    if self.__CanUpdateAttr(player.INVENTORY, dstSlotPos):
                        return True
        return False
 
elif player.GetItemIndex(srcSlotPos) == 71500:
item.SelectItem(player.GetItemIndex(dstSlotPos))
if item.GetItemType() == item.ITEM_TYPE_COSTUME and itemSubType != item.COSTUME_TYPE_ACCE:
return True

şunu yanlış anlamışsın :D
aşağıdaki gibi yap ki client kısmıda düzgün olsun
if item.GetItemType() == item.ITEM_TYPE_COSTUME and itemSubType == item.COSTUME_TYPE_ACCE:

neden düzenlemediği hakkında genel bir bilgim yok kuşak sistemini hiç oturup detaylı incelemedim. gördüğüm tek hata bu.
@TheAd33
 
elif player.GetItemIndex(srcSlotPos) == 71500:
item.SelectItem(player.GetItemIndex(dstSlotPos))
if item.GetItemType() == item.ITEM_TYPE_COSTUME and itemSubType != item.COSTUME_TYPE_ACCE:
return True

şunu yanlış anlamışsın :D
aşağıdaki gibi yap ki client kısmıda düzgün olsun
if item.GetItemType() == item.ITEM_TYPE_COSTUME and itemSubType == item.COSTUME_TYPE_ACCE:

neden düzenlemediği hakkında genel bir bilgim yok kuşak sistemini hiç oturup detaylı incelemedim. gördüğüm tek hata bu.
@TheAd33
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?
 
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
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Üst