Çözüldü chat ekranına item yansıtma hk

  • Konuyu açan Konuyu açan enes turan
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 6
  • Gösterim Gösterim 90
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

Yardımsever Üye
Yardımsever Üye
MT Üye
Mesaj
589
Çözümler
38
Beğeni
306
Puan
909
Ticaret Puanı
0
merhabalar owsap'ın warez applly_random bonus sistemini eklemiştim sistemde sorun yok fakat chat ekranına item yansıtırken bonuslar gözükmüyor

şöyleki
envanterdeki hali
1.webp


itemi yansıtınca gözüken

2.webp


uitooltip.py:
Genişlet Daralt Kopyala
    def SetHyperlinkItem(self, tokens):
        minTokenCount = 3 + player.METIN_SOCKET_MAX_NUM
        if app.BL_TRANSMUTATION_SYSTEM:
            minTokenCount += 1
        maxTokenCount = minTokenCount + 2 * player.ATTRIBUTE_SLOT_MAX_NUM
        if tokens and len(tokens) >= minTokenCount and len(tokens) <= maxTokenCount:
            head, vnum, flag = tokens[:3]
            itemVnum = int(vnum, 16)
            metinSlot = [int(metin, 16) for metin in tokens[3:6]]

            if app.BL_TRANSMUTATION_SYSTEM:
                changelookvnum = int(tokens[6],16)
                rests = tokens[7:]
            else:
                rests = tokens[6:]
            if rests:
                attrSlot = []

                rests.reverse()
                while rests:
                    key = int(rests.pop(), 16)
                    if rests:
                        val = int(rests.pop())
                        attrSlot.append((key, val))

                attrSlot += [(0, 0)] * (player.ATTRIBUTE_SLOT_MAX_NUM - len(attrSlot))
            else:
                attrSlot = [(0, 0)] * player.ATTRIBUTE_SLOT_MAX_NUM

            self.ClearToolTip()
            self.AddItemData(itemVnum, metinSlot, attrSlot)
            if app.BL_TRANSMUTATION_SYSTEM:
                self.AppendChangeLookInfoItemVnum(changelookvnum)

            ItemToolTip.OnUpdate(self)

hyperlinkitem içerisine şöyle bir kod bloğu ekledim fakat sonuç alamadım

uitooltip.py:
Genişlet Daralt Kopyala
   def SetHyperlinkItem(self, tokens):
        minTokenCount = 3 + player.METIN_SOCKET_MAX_NUM

        if app.ENABLE_APPLY_RANDOM:
            minTokenCount = 2 + player.APPLY_RANDOM_SLOT_MAX_NUM

        if app.BL_TRANSMUTATION_SYSTEM:
            minTokenCount += 1

        maxTokenCount = minTokenCount + 2 * player.ATTRIBUTE_SLOT_MAX_NUM
        if tokens and len(tokens) >= minTokenCount and len(tokens) <= maxTokenCount:
            head, vnum, flag = tokens[:3]
            itemVnum = int(vnum, 16)
            metinSlot = [int(metin, 16) for metin in tokens[3:6]]


            if app.ENABLE_APPLY_RANDOM:
                apply_random = tokens[6:]
                if apply_random:
                    apply_random_list = []

                    apply_random.reverse()
                    while apply_random:
                        key = int(apply_random.pop(), 16)
                        if apply_random:
                            val = int(apply_random.pop())
                            apply_random_list.append((key, val))

                    apply_random_list += [(0, 0)] * (player.APPLY_RANDOM_SLOT_MAX_NUM - len(apply_random_list))
                else:
                    apply_random_list = [(0, 0)] * player.APPLY_RANDOM_SLOT_MAX_NUM


            if app.BL_TRANSMUTATION_SYSTEM:
                changelookvnum = int(tokens[6],16)
                rests = tokens[7:]
            else:
                rests = tokens[6:]
            if rests:
                attrSlot = []

                rests.reverse()
                while rests:
                    key = int(rests.pop(), 16)
                    if rests:
                        val = int(rests.pop())
                        attrSlot.append((key, val))

                attrSlot += [(0, 0)] * (player.ATTRIBUTE_SLOT_MAX_NUM - len(attrSlot))
            else:
                attrSlot = [(0, 0)] * player.ATTRIBUTE_SLOT_MAX_NUM

            self.ClearToolTip()
            self.AddItemData(itemVnum, metinSlot, attrSlot, None, 0, 0, player.INVENTORY, -1, None, apply_random_list)
            if app.BL_TRANSMUTATION_SYSTEM:
                self.AppendChangeLookInfoItemVnum(changelookvnum)

            ItemToolTip.OnUpdate(self)
 
Çözüm
Python ile src tarafı uyuşmuyor.
Senin gönderdiğin .cpp dosyasında 6.token yansıtma sistemine(BL_TRANSMUTATION) denk geliyor.
Dolayısıyla uitooltip.py ye eklediğin apply_random = tokens[6:] tanımı yansıtma sistemine ait tokeni döndürmeye çalışıyor.

Özetle; PythonChatModule.cpp içindeki chatGetLinkFromHyperlink fonksiyonunu, ve PythonPlayerModule.cpp dosyasındaki playerGetItemLink fonksiyonlarını gözden geçirmen ve kendi dosyalarına/sistemlerine göre uyarlaman ve gerekli tokenleri eklemen gerek.
çözüme ulaştım fikirleriniz için teşekkür ederim

pythonchat.h:
Genişlet Daralt Kopyala
        enum EHyperlinkType
        {
            HYPER_LINK_ITEM_KEYWORD,
            HYPER_LINK_ITEM_VNUM...
def AddItemData(self): fonksiyonunu iyice kontrol et. Ve argüman sıralarına dikkat et.
Ek olarak def SetHyperlinkItem'e yaptığın ekleme de kalsın.
 
def AddItemData(self): fonksiyonunu iyice kontrol et. Ve argüman sıralarına dikkat et.
Ek olarak def SetHyperlinkItem'e yaptığın ekleme de kalsın.
Python:
Genişlet Daralt Kopyala
    def AddItemData(self, itemVnum, metinSlot, attrSlot = 0, rare_attr_slot = None, flags = 0, unbindTime = 0, window_type = player.INVENTORY, slotIndex = -1, refine_element = None, apply_random_list = None, set_value = 0):
yanlış anlamadıysam burdaki sıralamadan bahsediyorsunuz apply_random_list 10. sıradaymış kodu şu şekilde güncelledim

Python:
Genişlet Daralt Kopyala
    def SetHyperlinkItem(self, tokens):
        minTokenCount = 3 + player.METIN_SOCKET_MAX_NUM

        if app.ENABLE_APPLY_RANDOM:
            minTokenCount = 2 + player.APPLY_RANDOM_SLOT_MAX_NUM

        if app.BL_TRANSMUTATION_SYSTEM:
            minTokenCount += 1

        maxTokenCount = minTokenCount + 2 * player.ATTRIBUTE_SLOT_MAX_NUM
        if tokens and len(tokens) >= minTokenCount and len(tokens) <= maxTokenCount:
            head, vnum, flag = tokens[:3]
            itemVnum = int(vnum, 16)
            metinSlot = [int(metin, 16) for metin in tokens[3:6]]


            if app.ENABLE_APPLY_RANDOM:
                apply_random = tokens[10:]
                if apply_random:
                    apply_random_list = []

                    apply_random.reverse()
                    while apply_random:
                        key = int(apply_random.pop(), 16)
                        if apply_random:
                            val = int(apply_random.pop())
                            apply_random_list.append((key, val))

                    apply_random_list += [(0, 0)] * (player.APPLY_RANDOM_SLOT_MAX_NUM - len(apply_random_list))
                else:
                    apply_random_list = [(0, 0)] * player.APPLY_RANDOM_SLOT_MAX_NUM


            if app.BL_TRANSMUTATION_SYSTEM:
                changelookvnum = int(tokens[6],16)
                rests = tokens[7:]
            else:
                rests = tokens[6:]
            if rests:
                attrSlot = []

                rests.reverse()
                while rests:
                    key = int(rests.pop(), 16)
                    if rests:
                        val = int(rests.pop())
                        attrSlot.append((key, val))

                attrSlot += [(0, 0)] * (player.ATTRIBUTE_SLOT_MAX_NUM - len(attrSlot))
            else:
                attrSlot = [(0, 0)] * player.ATTRIBUTE_SLOT_MAX_NUM

            self.ClearToolTip()
            self.AddItemData(itemVnum, metinSlot, attrSlot, None, 0, 0, player.INVENTORY, -1, None, apply_random_list)
            if app.BL_TRANSMUTATION_SYSTEM:
                self.AppendChangeLookInfoItemVnum(changelookvnum)

            ItemToolTip.OnUpdate(self)

ve oyunda şöyle oldu

Adsız.webp
 

Dosya Eklentileri

tokens[] listesi src ile doğrudan bağlantılıdır. Bahsettiğim şey bu değil, daha çok karışıklık olmadan bu yaptığın işlemi geri al.
PythonChatModule.cpp dosyasını gönderir misin?
 
tokens[] listesi src ile doğrudan bağlantılıdır. Bahsettiğim şey bu değil, daha çok karışıklık olmadan bu yaptığın işlemi geri al.
PythonChatModule.cpp dosyasını gönderir misin?
tabiki buyrun
 

Dosya Eklentileri

Python ile src tarafı uyuşmuyor.
Senin gönderdiğin .cpp dosyasında 6.token yansıtma sistemine(BL_TRANSMUTATION) denk geliyor.
Dolayısıyla uitooltip.py ye eklediğin apply_random = tokens[6:] tanımı yansıtma sistemine ait tokeni döndürmeye çalışıyor.

Özetle; PythonChatModule.cpp içindeki chatGetLinkFromHyperlink fonksiyonunu, ve PythonPlayerModule.cpp dosyasındaki playerGetItemLink fonksiyonlarını gözden geçirmen ve kendi dosyalarına/sistemlerine göre uyarlaman ve gerekli tokenleri eklemen gerek.
 
Python ile src tarafı uyuşmuyor.
Senin gönderdiğin .cpp dosyasında 6.token yansıtma sistemine(BL_TRANSMUTATION) denk geliyor.
Dolayısıyla uitooltip.py ye eklediğin apply_random = tokens[6:] tanımı yansıtma sistemine ait tokeni döndürmeye çalışıyor.

Özetle; PythonChatModule.cpp içindeki chatGetLinkFromHyperlink fonksiyonunu, ve PythonPlayerModule.cpp dosyasındaki playerGetItemLink fonksiyonlarını gözden geçirmen ve kendi dosyalarına/sistemlerine göre uyarlaman ve gerekli tokenleri eklemen gerek.
çözüme ulaştım fikirleriniz için teşekkür ederim

pythonchat.h:
Genişlet Daralt Kopyala
        enum EHyperlinkType
        {
            HYPER_LINK_ITEM_KEYWORD,
            HYPER_LINK_ITEM_VNUM,
            HYPER_LINK_ITEM_FLAGS,
            HYPER_LINK_ITEM_SOCKET0,
            HYPER_LINK_ITEM_SOCKET1,
            HYPER_LINK_ITEM_SOCKET2,
            HYPER_LINK_ITEM_CHANGE_ITEM_VNUM,
            HYPER_LINK_ITEM_APPLY_RANDOM_TYPE0,
            HYPER_LINK_ITEM_APPLY_RANDOM_VALUE0,
            HYPER_LINK_ITEM_APPLY_RANDOM_TYPE1,
            HYPER_LINK_ITEM_APPLY_RANDOM_VALUE1,
            HYPER_LINK_ITEM_APPLY_RANDOM_TYPE2,
            HYPER_LINK_ITEM_APPLY_RANDOM_VALUE2,
            HYPER_LINK_ITEM_ATTRIBUTE_TYPE0,
            HYPER_LINK_ITEM_ATTRIBUTE_VALUE0,
            HYPER_LINK_ITEM_ATTRIBUTE_TYPE1,
            HYPER_LINK_ITEM_ATTRIBUTE_VALUE1,
            HYPER_LINK_ITEM_ATTRIBUTE_TYPE2,
            HYPER_LINK_ITEM_ATTRIBUTE_VALUE2,
            HYPER_LINK_ITEM_ATTRIBUTE_TYPE3,
            HYPER_LINK_ITEM_ATTRIBUTE_VALUE3,
            HYPER_LINK_ITEM_ATTRIBUTE_TYPE4,
            HYPER_LINK_ITEM_ATTRIBUTE_VALUE4,
            HYPER_LINK_ITEM_ATTRIBUTE_TYPE5,
            HYPER_LINK_ITEM_ATTRIBUTE_VALUE5,
            HYPER_LINK_ITEM_ATTRIBUTE_TYPE6,
            HYPER_LINK_ITEM_ATTRIBUTE_VALUE6
        };

pythonchatmodule.cpp:
Genişlet Daralt Kopyala
PyObject* chatGetLinkFromHyperlink(PyObject* poSelf, PyObject* poArgs)
{
    char* szHyperlink;

    if (!PyTuple_GetString(poArgs, 0, &szHyperlink))
        return Py_BuildException();

    std::string stHyperlink(szHyperlink);
    std::vector<std::string> results;

    split_string(stHyperlink, ":", results, false);

    // item:vnum:flag:socket0:socket1:socket2
    if (0 == results[0].compare("item"))
    {
        if (results.size() < 6)
            return Py_BuildValue("s", "");

        CItemData* pItemData = NULL;

        if (CItemManager::Instance().GetItemDataPointer(htoi(results[1].c_str()), &pItemData))
        {
            char buf[1024] = { 0 };
            char itemlink[256];
            int len;
            bool isAttr = false;

            len = snprintf(itemlink, sizeof(itemlink), "item:%x:%x:%x:%x:%x",
                htoi(results[1].c_str()),
                htoi(results[2].c_str()),
                htoi(results[3].c_str()),
                htoi(results[4].c_str()),
                htoi(results[5].c_str()));

            if (results.size() >= 8)
            {
                for (int i = 6; i < results.size(); i += 2)
                {
                    len += snprintf(itemlink + len, sizeof(itemlink) - len, ":%x:%d",
                        htoi(results[i].c_str()),
                        atoi(results[i + 1].c_str()));
                    isAttr = true;
                }
            }

            if (isAttr)
                //"item:锅龋:敲贰弊:家南0:家南1:家南2"
                snprintf(buf, sizeof(buf), "|cffffc700|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
            else
                snprintf(buf, sizeof(buf), "|cfff1e6c0|H%s|h[%s]|h|r", itemlink, pItemData->GetName());

            return Py_BuildValue("s", buf);
        }
    }

    return Py_BuildValue("s", "");
}



    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_KEYWORD", CPythonChat::HYPER_LINK_ITEM_KEYWORD);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_VNUM", CPythonChat::HYPER_LINK_ITEM_VNUM);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_FLAGS", CPythonChat::HYPER_LINK_ITEM_FLAGS);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_SOCKET0", CPythonChat::HYPER_LINK_ITEM_SOCKET0);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_SOCKET1", CPythonChat::HYPER_LINK_ITEM_SOCKET1);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_SOCKET2", CPythonChat::HYPER_LINK_ITEM_SOCKET2);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_CHANGE_ITEM_VNUM", CPythonChat::HYPER_LINK_ITEM_CHANGE_ITEM_VNUM);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_APPLY_RANDOM_TYPE0", CPythonChat::HYPER_LINK_ITEM_APPLY_RANDOM_TYPE0);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_APPLY_RANDOM_VALUE0", CPythonChat::HYPER_LINK_ITEM_APPLY_RANDOM_VALUE0);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_APPLY_RANDOM_TYPE1", CPythonChat::HYPER_LINK_ITEM_APPLY_RANDOM_TYPE1);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_APPLY_RANDOM_VALUE1", CPythonChat::HYPER_LINK_ITEM_APPLY_RANDOM_VALUE1);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_APPLY_RANDOM_TYPE2", CPythonChat::HYPER_LINK_ITEM_APPLY_RANDOM_TYPE2);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_APPLY_RANDOM_VALUE2", CPythonChat::HYPER_LINK_ITEM_APPLY_RANDOM_VALUE2);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_ATTRIBUTE_TYPE0", CPythonChat::HYPER_LINK_ITEM_ATTRIBUTE_TYPE0);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_ATTRIBUTE_VALUE0", CPythonChat::HYPER_LINK_ITEM_ATTRIBUTE_VALUE0);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_ATTRIBUTE_TYPE1", CPythonChat::HYPER_LINK_ITEM_ATTRIBUTE_TYPE1);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_ATTRIBUTE_VALUE1", CPythonChat::HYPER_LINK_ITEM_ATTRIBUTE_VALUE1);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_ATTRIBUTE_TYPE2", CPythonChat::HYPER_LINK_ITEM_ATTRIBUTE_TYPE2);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_ATTRIBUTE_VALUE2", CPythonChat::HYPER_LINK_ITEM_ATTRIBUTE_VALUE2);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_ATTRIBUTE_TYPE3", CPythonChat::HYPER_LINK_ITEM_ATTRIBUTE_TYPE3);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_ATTRIBUTE_VALUE3", CPythonChat::HYPER_LINK_ITEM_ATTRIBUTE_VALUE3);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_ATTRIBUTE_TYPE4", CPythonChat::HYPER_LINK_ITEM_ATTRIBUTE_TYPE4);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_ATTRIBUTE_VALUE4", CPythonChat::HYPER_LINK_ITEM_ATTRIBUTE_VALUE4);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_ATTRIBUTE_TYPE5", CPythonChat::HYPER_LINK_ITEM_ATTRIBUTE_TYPE5);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_ATTRIBUTE_VALUE5", CPythonChat::HYPER_LINK_ITEM_ATTRIBUTE_VALUE5);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_ATTRIBUTE_TYPE6", CPythonChat::HYPER_LINK_ITEM_ATTRIBUTE_TYPE6);
    PyModule_AddIntConstant(poModule, "HYPER_LINK_ITEM_ATTRIBUTE_VALUE6", CPythonChat::HYPER_LINK_ITEM_ATTRIBUTE_VALUE6);

pythonplayermodule.cpp:
Genişlet Daralt Kopyala
playerGetItemLink fonksiyonu içerisine

#if defined(ENABLE_APPLY_RANDOM)
        for (int i = 0; i < ITEM_APPLY_RANDOM_SLOT_MAX_NUM; ++i)
        {
            len += snprintf(itemlink + len, sizeof(itemlink) - len, ":%x:%d",
                pPlayerItem->aApplyRandom[i].bType, pPlayerItem->aApplyRandom[i].sValue);
        }
#endif

ve son olarak
uitooltip.py:
Genişlet Daralt Kopyala
    def SetHyperlinkItem(self, tokens):
        import chat

        minTokenCount = chat.HYPER_LINK_ITEM_KEYWORD + chat.HYPER_LINK_ITEM_VNUM + chat.HYPER_LINK_ITEM_FLAGS
        minTokenCount += player.METIN_SOCKET_MAX_NUM

        if app.BL_TRANSMUTATION_SYSTEM:
            minTokenCount += 1

        if app.ENABLE_APPLY_RANDOM:
            minTokenCount += 2 * player.APPLY_RANDOM_SLOT_MAX_NUM

        maxTokenCount = minTokenCount + 2 * player.ATTRIBUTE_SLOT_MAX_NUM

        if tokens and len(tokens) >= minTokenCount and len(tokens) <= maxTokenCount:
            head, vnum, flag = tokens[:chat.HYPER_LINK_ITEM_KEYWORD + chat.HYPER_LINK_ITEM_VNUM + chat.HYPER_LINK_ITEM_FLAGS]
            itemVnum = int(vnum, 16)
            metinSlot = [int(metin, 16) for metin in tokens[chat.HYPER_LINK_ITEM_SOCKET0:chat.HYPER_LINK_ITEM_SOCKET0 + player.METIN_SOCKET_MAX_NUM + 1]]

            if app.BL_TRANSMUTATION_SYSTEM:
                changelookvnum = int(tokens[chat.HYPER_LINK_ITEM_CHANGE_ITEM_VNUM], 16)

            if app.ENABLE_APPLY_RANDOM:
                apply_random = tokens[chat.HYPER_LINK_ITEM_APPLY_RANDOM_TYPE0:chat.HYPER_LINK_ITEM_APPLY_RANDOM_VALUE2 + 1]
                print apply_random
                if apply_random:
                    apply_random_list = []

                    apply_random.reverse()
                    while apply_random:
                        key = int(apply_random.pop(), 16)
                        if apply_random:
                            val = int(apply_random.pop())
                            apply_random_list.append((key, val))

                    apply_random_list += [(0, 0)] * (player.APPLY_RANDOM_SLOT_MAX_NUM - len(apply_random_list))
                else:
                    apply_random_list = [(0, 0)] * player.APPLY_RANDOM_SLOT_MAX_NUM

            rests = tokens[minTokenCount:]
            if rests:
                attrSlot = []

                rests.reverse()
                while rests:
                    key = int(rests.pop(), 16)
                    if rests:
                        val = int(rests.pop())
                        attrSlot.append((key, val))

                attrSlot += [(0, 0)] * (player.ATTRIBUTE_SLOT_MAX_NUM - len(attrSlot))
            else:
                attrSlot = [(0, 0)] * player.ATTRIBUTE_SLOT_MAX_NUM

            self.ClearToolTip()
            self.AddItemData(itemVnum, metinSlot, attrSlot, None, 0, 0, player.INVENTORY, -1, None, apply_random_list)

            if app.BL_TRANSMUTATION_SYSTEM:
                self.AppendChangeLookInfoItemVnum(changelookvnum)

            ItemToolTip.OnUpdate(self)

Adsız.webp
 
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Üst