Yardım Beceri kitabı kazandın Bilgisini düzenleme

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

Happy Way

Yardımsever Üye
Yardımsever Üye
MT Üye
Mesaj
416
Çözümler
33
Beğeni
133
Puan
869
Ticaret Puanı
0
SHOW_DROPPED_ITEM_INFORMATION sistemini ekledim aşağıdaki gibi bir görsel elde ettik bu sistem nedir ; Düşen itemlerin isimlerini detaylandırıyor adet sayısı zırh ise silah ise görsel olarak düşen itemlerin bilgilendirmesi için adet sayısı vs . Benim sorunum şu beceri kitabı ismini metin kesildiğinde düştüğünde istediğim gibi gözüküyor fakat topladığımda 2.görseldeki gibi beceri kitabı kazandın yazıyor bu kısmı nasıl düzenleyebilirim?

void CPythonItem::CreateItem(DWORD dwVirtualID, DWORD dwVirtualNumber, long socket0, long socket1, long socket2, DWORD count, float x, float y, float z, bool bDrop)

kısmında drop kısmındaki blok bu şekilde
Pythonitem.cpp:
Genişlet Daralt Kopyala
    m_GroundItemInstanceMap.insert(TGroundItemInstanceMap::value_type(dwVirtualID, pGroundItemInstance));
#ifdef SHOW_DROPPED_ITEM_INFORMATION
    char szText[1024];
    const char* colorCode = "";

    if (pItemData->GetType() == CItemData::ITEM_TYPE_SKILLBOOK)
    {
        CPythonSkill::SSkillData* c_pSkillData;
        if (CPythonSkill::Instance().GetSkillData(socket0, &c_pSkillData))
        {
            colorCode = "|cffffcc00";
            sprintf(szText, "%s%s %s", colorCode, c_pSkillData->strName.c_str(), pItemData->GetName());
        }
        else
        {
            colorCode = "";
            sprintf(szText, "%s", pItemData->GetName());
        }
    }
    else if (pItemData->GetType() == CItemData::ITEM_TYPE_SKILLFORGET)
    {
        colorCode = "|cff00ced1";
        sprintf(szText, "%s%s", colorCode, pItemData->GetName());
    }
    else if (pItemData->GetType() == CItemData::ITEM_TYPE_WEAPON || pItemData->GetType() == CItemData::ITEM_TYPE_ARMOR)
    {
        colorCode = "|cff98fb98";
        sprintf(szText, "%s%s", colorCode, pItemData->GetName());
    }
    else
    {
        sprintf(szText, "%s", pItemData->GetName());
    }

    if (count > 1)
    {
        size_t len = strlen(szText);
        sprintf(szText + len, "(%d)", count);
    }
#endif
    CPythonTextTail& rkTextTail = CPythonTextTail::Instance();
    rkTextTail.RegisterItemTextTail(
        dwVirtualID,
#ifdef SHOW_DROPPED_ITEM_INFORMATION
        szText,
#else
        pItemData->GetName(),
#endif
        & pGroundItemInstance->ThingInstance);
}

0428_192142.webp
0428_192148.webp
 
char_item.cpp PickupItem fonksiyonunu düzenlemen lazım.
C++:
Genişlet Daralt Kopyala
bool CHARACTER::PickupItem(DWORD dwVID)
{
    LPITEM item = ITEM_MANAGER::instance().FindByVID(dwVID);

    if (IsObserverMode())
    {
        return false;
    }

    if (!item || !item->GetSectree())
    {
        return false;
    }

    if (item->DistanceValid(this))
    {
#ifdef fixme071
        if (item->GetType() == ITEM_QUEST)
        {
            if (quest::CQuestManager::instance().GetPCForce(GetPlayerID())->IsRunning() == true)
            {
                ChatPacket(CHAT_TYPE_INFO, "[LS;1910]");
                return false;
            }
        }
#endif
        if (item->IsOwnership(this))
        {
            // ¸¸¾à ÁÖÀ¸·Á ÇÏ´Â ¾ÆÀÌÅÛÀÌ ¿¤Å©¶ó¸é
            if (item->GetType() == ITEM_ELK)
            {
                GiveGold(item->GetCount());
                item->RemoveFromGround();

                M2_DESTROY_ITEM(item);

                Save();
            }
            // Æò¹üÇÑ ¾ÆÀÌÅÛÀ̶ó¸é
            else
            {
                if (item->IsStackable() && !IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_STACK))
                {
                    BYTE bCount = item->GetCount();

                    for (int i = 0; i < INVENTORY_MAX_NUM; ++i)
                    {
                        LPITEM item2 = GetInventoryItem(i);

                        if (!item2)
                        {
                            continue;
                        }

                        if (item2->GetVnum() == item->GetVnum())
                        {
                            int j;

                            for (j = 0; j < ITEM_SOCKET_MAX_NUM; ++j)
                                if (item2->GetSocket(j) != item->GetSocket(j))
                                {
                                    break;
                                }

                            if (j != ITEM_SOCKET_MAX_NUM)
                            {
                                continue;
                            }

                            BYTE bCount2 = MIN(200 - item2->GetCount(), bCount);
                            bCount -= bCount2;

                            item2->SetCount(item2->GetCount() + bCount2);

                            if (bCount == 0)
                            {
                                ChatPacket(CHAT_TYPE_INFO, "[LS;444;%s]", item2->GetName());
                                M2_DESTROY_ITEM(item);
                                if (item2->GetType() == ITEM_QUEST)
                                {
                                    quest::CQuestManager::instance().PickupItem(GetPlayerID(), item2);
                                }
                                return true;
                            }
                        }
                    }

                    item->SetCount(bCount);
                }

                int iEmptyCell;
                if (item->IsDragonSoul())
                {
                    if ((iEmptyCell = GetEmptyDragonSoulInventory(item)) == -1)
                    {
                        sys_log(0, "No empty ds inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, "[LS;445]");
                        return false;
                    }
                }
                else
                {
                    if ((iEmptyCell = GetEmptyInventory(item->GetSize())) == -1)
                    {
                        sys_log(0, "No empty inventory pid %u size %ud itemid %u", GetPlayerID(), item->GetSize(), item->GetID());
                        ChatPacket(CHAT_TYPE_INFO, "[LS;445]");
                        return false;
                    }
                }

                item->RemoveFromGround();

                if (item->IsDragonSoul())
                {
                    item->AddToCharacter(this, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyCell));
                }
                else
                {
                    item->AddToCharacter(this, TItemPos(INVENTORY, iEmptyCell));
                }

                char szHint[32 + 1];
                snprintf(szHint, sizeof(szHint), "%s %u %u", item->GetName(), item->GetCount(), item->GetOriginalVnum());
                LogManager::instance().ItemLog(this, item, "GET", szHint);
                ChatPacket(CHAT_TYPE_INFO, "[LS;444;%s]", item->GetName());

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

            //Motion(MOTION_PICKUP);
            return true;
        }
        else if (!IS_SET(item->GetAntiFlag(), ITEM_ANTIFLAG_GIVE | ITEM_ANTIFLAG_DROP) && GetParty())
        {
            // ´Ù¸¥ ÆÄƼ¿ø ¼ÒÀ¯±Ç ¾ÆÀÌÅÛÀ» ÁÖÀ¸·Á°í ÇÑ´Ù¸é
            NPartyPickupDistribute::FFindOwnership funcFindOwnership(item);

            GetParty()->ForEachOnlineMember(funcFindOwnership);

            LPCHARACTER owner = funcFindOwnership.owner;

#ifdef fixme044
            if (!owner)
                return false;
#endif

            int iEmptyCell = -1;

            if (item->IsDragonSoul())
            {
                if (!(owner && (iEmptyCell = owner->GetEmptyDragonSoulInventory(item)) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptyDragonSoulInventory(item)) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, "[LS;445]");
                        return false;
                    }
                }
            }
            else
            {
                if (!(owner && (iEmptyCell = owner->GetEmptyInventory(item->GetSize())) != -1))
                {
                    owner = this;

                    if ((iEmptyCell = GetEmptyInventory(item->GetSize())) == -1)
                    {
                        owner->ChatPacket(CHAT_TYPE_INFO, "[LS;445]");
                        return false;
                    }
                }
            }

            item->RemoveFromGround();

            if (item->IsDragonSoul())
            {
                item->AddToCharacter(owner, TItemPos(DRAGON_SOUL_INVENTORY, iEmptyCell));
            }
            else
            {
                item->AddToCharacter(owner, TItemPos(INVENTORY, iEmptyCell));
            }

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

            if (owner == this)
            {
                ChatPacket(CHAT_TYPE_INFO, "[LS;444;%s]", item->GetName());
            }
            else
            {
                owner->ChatPacket(CHAT_TYPE_INFO, "[LS;446;%s;%s]", GetName(), item->GetName());
                ChatPacket(CHAT_TYPE_INFO, "[LS;449;%s;%s]", owner->GetName(), item->GetName());
            }

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

            return true;
        }
    }

    return false;
}
içerisi bu şekilde neresini düzenlemeliyim
 
C++:
Genişlet Daralt Kopyala
            char szHint[32 + 1];
            snprintf(szHint, sizeof(szHint), "%s %u %u", item->GetName(), item->GetCount(), item->GetOriginalVnum());
            LogManager::instance().ItemLog(owner, item, "GET", szHint);

            if (owner == this)
            {
                ChatPacket(CHAT_TYPE_INFO, "[LS;444;%s]", item->GetName());
            }

Bu kısmı düzenlemen gerek. Eğer varsa sistemin server tarafındaki kodlara bakarak konuda verdiğin kodda uygulanan mantığın aynısını burda da uygulaman lazım.
 
C++:
Genişlet Daralt Kopyala
            char szHint[32 + 1];
            snprintf(szHint, sizeof(szHint), "%s %u %u", item->GetName(), item->GetCount(), item->GetOriginalVnum());
            LogManager::instance().ItemLog(owner, item, "GET", szHint);

            if (owner == this)
            {
                ChatPacket(CHAT_TYPE_INFO, "[LS;444;%s]", item->GetName());
            }

Bu kısmı düzenlemen gerek. Eğer varsa sistemin server tarafındaki kodlara bakarak konuda verdiğin kodda uygulanan mantığın aynısını burda da uygulaman lazım.
server tabanında bir işlem olarak şu satırlar var

C++:
Genişlet Daralt Kopyala
void CItem::EncodeInsertPacket(LPENTITY ent)
{
    LPDESC d;

    if (!(d = ent->GetDesc()))
    {
        return;
    }

    const PIXEL_POSITION& c_pos = GetXYZ();

    struct packet_item_ground_add pack;

    pack.bHeader = HEADER_GC_ITEM_GROUND_ADD;
    pack.x = c_pos.x;
    pack.y = c_pos.y;
    pack.z = c_pos.z;
    pack.dwVnum = GetVnum();
    pack.dwVID = m_dwVID;
#ifdef SHOW_DROPPED_ITEM_INFORMATION
    for (int i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
        pack.alSockets[i] = m_alSockets[i];
    pack.count = m_dwCount;
#endif

C++:
Genişlet Daralt Kopyala
typedef struct packet_item_ground_add
{
    BYTE    bHeader;
    long     x, y, z;
    DWORD    dwVID;
    DWORD    dwVnum;
#ifdef SHOW_DROPPED_ITEM_INFORMATION
    long    alSockets[ITEM_SOCKET_MAX_NUM];
    DWORD    count;
#endif
} TPacketGCItemGroundAdd;



Başka bir filesten aldığım şu kod ile sanırım düzeltiyorlar bunu nasıl benim sisteme uyarlarım
item.cpp:
Genişlet Daralt Kopyala
#ifdef ENABLE_EXTENDED_ITEMNAME_ON_GROUND
const char* CItem::GetName()
{
#ifdef ENABLE_MULTI_LANGUAGE_SYSTEM
    BYTE bLocale = GetOwner() ? GetOwner()->GetLanguage() : LOCALE_YMIR;
#endif
    static char szItemName[128];
    memset(szItemName, 0, sizeof(szItemName));
    if (GetProto())
    {
        int len = 0;
        switch (GetType())
        {
        case ITEM_POLYMORPH:
        {
            const DWORD dwMobVnum = GetSocket(0);
            const CMob* pMob = CMobManager::instance().Get(dwMobVnum);
            if (pMob)
#ifdef ENABLE_MULTI_LANGUAGE_SYSTEM
                len = snprintf(szItemName, sizeof(szItemName), "%s", LC_LOCALE_MOB_TEXT(dwMobVnum, bLocale));
#else
                len = snprintf(szItemName, sizeof(szItemName), "%s", pMob->m_table.szLocaleName);
#endif
            break;
        }
/*        case ITEM_SKILLBOOK:
        case ITEM_SKILLFORGET:
        {
            const DWORD dwSkillVnum = (GetVnum() == ITEM_SKILLBOOK_VNUM || GetVnum() == ITEM_SKILLFORGET_VNUM) ? GetSocket(0) : 0;
            const CSkillProto* pSkill = (dwSkillVnum != 0) ? CSkillManager::instance().Get(dwSkillVnum) : NULL;
            if (pSkill)
#ifdef ENABLE_MULTI_LANGUAGE_SYSTEM
                len = snprintf(szItemName, sizeof(szItemName), "%s", LC_LOCALE_SKILL_TEXT(dwSkillVnum, bLocale));
#else
                len = snprintf(szItemName, sizeof(szItemName), "%s", pSkill->szName);
#endif
            break;
        }*/
        }
#ifdef ENABLE_MULTI_LANGUAGE_SYSTEM
        len += snprintf(szItemName + len, sizeof(szItemName) - len, (len > 0) ? " %s" : "%s", LC_LOCALE_ITEM_TEXT(GetVnum(), bLocale));
#else
        len += snprintf(szItemName + len, sizeof(szItemName) - len, (len > 0) ? " %s" : "%s", GetProto()->szLocaleName);
#endif
    }
    return szItemName;
}

std::string CItem::GetNameString()
{
    static char szItemName[128];
    memset(szItemName, 0, sizeof(szItemName));
    if (GetProto())
    {
        int len = 0;
        switch (GetType())
        {
        case ITEM_POLYMORPH:
        {
            const DWORD dwMobVnum = GetSocket(0);
            const CMob* pMob = CMobManager::instance().Get(dwMobVnum);
            if (pMob)
                len = snprintf(szItemName, sizeof(szItemName), "%s", pMob->m_table.szLocaleName);

            break;
        }
        case ITEM_SKILLBOOK:
        case ITEM_SKILLFORGET:
        {
            const DWORD dwSkillVnum = (GetVnum() == ITEM_SKILLBOOK_VNUM || GetVnum() == ITEM_SKILLFORGET_VNUM) ? GetSocket(0) : 0;
            const CSkillProto* pSkill = (dwSkillVnum != 0) ? CSkillManager::instance().Get(dwSkillVnum) : NULL;
            if (pSkill)
                len = snprintf(szItemName, sizeof(szItemName), "%s", pSkill->szName);
            break;
        }
        }
        len += snprintf(szItemName + len, sizeof(szItemName) - len, (len > 0) ? " %s" : "%s", GetProto()->szLocaleName);
    }
    std::string returnSzItemName = szItemName;
    return returnSzItemName;
}
#endif
 
Son düzenleme:
Aşağıdaki gibi bir şey yaptım, muhtemelen çalışacaktır. Ancak şöyle bir sorun var, beceri kitaplarının adını Navicat/skill_protodan çeker.
Yani şu şekilde yazabilir;
"Penetrazione Beceri Kitabı Kazandın" (Ruh vuruşu)

Skillerin, itemlerde olduğu gibi localeName özelliği olmadığı için mecbur böyle yaptım. Navicatteki skill proto tablosunda szName sütunlarını düzeltirsen düzgün çalışır.

C++:
Genişlet Daralt Kopyala
#ifdef SHOW_DROPPED_ITEM_INFORMATION
            const DWORD SkillVnum = (item->GetVnum() == ITEM_SKILLBOOK_VNUM || item->GetVnum() == ITEM_SKILLFORGET_VNUM) ? item->GetSocket(0) : 0; //
            const CSkillProto* pSkill = (SkillVnum != 0) ? CSkillManager::instance().Get(SkillVnum) : NULL;
            if (pSkill)
                snprintf(szHint, sizeof(szHint), "%s %s %u %u", pSkill->szName, item->GetName(), item->GetCount(), item->GetOriginalVnum());
            else
                snprintf(szHint, sizeof(szHint), "%s %u %u", item->GetName(), item->GetCount(), item->GetOriginalVnum());
#else // orjinal kısım
            snprintf(szHint, sizeof(szHint), "%s %u %u", item->GetName(), item->GetCount(), item->GetOriginalVnum());
#endif
            LogManager::instance().ItemLog(owner, item, "GET", szHint);

            if (owner == this)
            {
#ifdef SHOW_DROPPED_ITEM_INFORMATION
                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¾ÆÀÌÅÛ È¹µæ: %s"), szHint);
#else // orjinal kısım
                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¾ÆÀÌÅÛ È¹µæ: %s"), item->GetName());
#endif

ChatPacket kısmını multilang sistemine göre düzenlersin.
 
Aşağıdaki gibi bir şey yaptım, muhtemelen çalışacaktır. Ancak şöyle bir sorun var, beceri kitaplarının adını Navicat/skill_protodan çeker.
Yani şu şekilde yazabilir;
"Penetrazione Beceri Kitabı Kazandın" (Ruh vuruşu)

Skillerin, itemlerde olduğu gibi localeName özelliği olmadığı için mecbur böyle yaptım. Navicatteki skill proto tablosunda szName sütunlarını düzeltirsen düzgün çalışır.

C++:
Genişlet Daralt Kopyala
#ifdef SHOW_DROPPED_ITEM_INFORMATION
            const DWORD SkillVnum = (item->GetVnum() == ITEM_SKILLBOOK_VNUM || item->GetVnum() == ITEM_SKILLFORGET_VNUM) ? item->GetSocket(0) : 0; //
            const CSkillProto* pSkill = (SkillVnum != 0) ? CSkillManager::instance().Get(SkillVnum) : NULL;
            if (pSkill)
                snprintf(szHint, sizeof(szHint), "%s %s %u %u", pSkill->szName, item->GetName(), item->GetCount(), item->GetOriginalVnum());
            else
                snprintf(szHint, sizeof(szHint), "%s %u %u", item->GetName(), item->GetCount(), item->GetOriginalVnum());
#else // orjinal kısım
            snprintf(szHint, sizeof(szHint), "%s %u %u", item->GetName(), item->GetCount(), item->GetOriginalVnum());
#endif
            LogManager::instance().ItemLog(owner, item, "GET", szHint);

            if (owner == this)
            {
#ifdef SHOW_DROPPED_ITEM_INFORMATION
                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¾ÆÀÌÅÛ È¹µæ: %s"), szHint);
#else // orjinal kısım
                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¾ÆÀÌÅÛ È¹µæ: %s"), item->GetName());
#endif

ChatPacket kısmını multilang sistemine göre düzenlersin.
değişen hiç birşey olmadı build sorunsuz build aldım GetSocket(0) kısmı ile alakalı olabilir mi acaba bende orasını eğer
Kod:
Genişlet Daralt Kopyala
typedef struct packet_item_ground_add
{
    BYTE    bHeader;
    long     x, y, z;
    DWORD    dwVID;
    DWORD    dwVnum;
#ifdef SHOW_DROPPED_ITEM_INFORMATION
    long    alSockets[ITEM_SOCKET_MAX_NUM];
    DWORD    count;
#endif
} TPacketGCItemGroundAdd;

alSockets kısmından çekiyorsa orası farklı ondan olabilir mi ?
 
değişen hiç birşey olmadı build sorunsuz build aldım GetSocket(0) kısmı ile alakalı olabilir mi acaba bende orasını eğer
Kod:
Genişlet Daralt Kopyala
typedef struct packet_item_ground_add
{
    BYTE    bHeader;
    long     x, y, z;
    DWORD    dwVID;
    DWORD    dwVnum;
#ifdef SHOW_DROPPED_ITEM_INFORMATION
    long    alSockets[ITEM_SOCKET_MAX_NUM];
    DWORD    count;
#endif
} TPacketGCItemGroundAdd;

alSockets kısmından çekiyorsa orası farklı ondan olabilir mi ?
Orasını bilemem, oladabilir olmayadabilir. Deneyebilirsin.
Filesında beceri kitaplarında skiller hangi sockete tanımlanıyorsa o socketi sorgulaman gerek sadece.
Kodu test ettim çalışıyor:
Ekran görüntüsü 2025-04-28 203705.webp
 
void CHARACTER::GiveRandomSkillBook() fonksiyonunun en sonunda gösterir
Kod:
Genişlet Daralt Kopyala
void CHARACTER::GiveRandomSkillBook()
{
    LPITEM item = AutoGiveItem(50300);

    if (NULL != item)
    {
        extern const DWORD GetRandomSkillVnum(BYTE bJob = JOB_MAX_NUM);
        DWORD dwSkillVnum = 0;
        // 50% of getting random books or getting one of the same player's race
        if (!number(0, 1))
            dwSkillVnum = GetRandomSkillVnum(GetJob());
        else
            dwSkillVnum = GetRandomSkillVnum();
        item->SetSocket(0, dwSkillVnum);
    }
}
bu şekilde bende item->SetSocket(0) olarak mı yapmam gerekiyor ?
 
Kod:
Genişlet Daralt Kopyala
void CHARACTER::GiveRandomSkillBook()
{
    LPITEM item = AutoGiveItem(50300);

    if (NULL != item)
    {
        extern const DWORD GetRandomSkillVnum(BYTE bJob = JOB_MAX_NUM);
        DWORD dwSkillVnum = 0;
        // 50% of getting random books or getting one of the same player's race
        if (!number(0, 1))
            dwSkillVnum = GetRandomSkillVnum(GetJob());
        else
            dwSkillVnum = GetRandomSkillVnum();
        item->SetSocket(0, dwSkillVnum);
    }
}
bu şekilde bende item->SetSocket(0) olarak mı yapmam gerekiyor ?
Zaten item->SetSocket(0, dwSkillVnum); şeklinde socket0 a tanımlıyor. Bir değişiklik yapmana gerek yok burada.
Verdiğim kodları eklerken yanlış bir şey yapmış olabilirsin. char szHint[32 + 1]; kısmından itibaren yapman gerekiyor düzenlemeleri.
 
Zaten item->SetSocket(0, dwSkillVnum); şeklinde socket0 a tanımlıyor. Bir değişiklik yapmana gerek yok burada.
Verdiğim kodları eklerken yanlış bir şey yapmış olabilirsin. char szHint[32 + 1]; kısmından itibaren yapman gerekiyor düzenlemeleri.


Arat:
item.h:
Genişlet Daralt Kopyala
const char* GetName() { return m_pProto ? m_pProto->szLocaleName : NULL; }
Değiştir:
C++:
Genişlet Daralt Kopyala
#ifdef SHOW_DROPPED_ITEM_INFORMATION
    const char* GetName();
#else
    const char* GetName() { return m_pProto ? m_pProto->szLocaleName : NULL; }
#endif

En alta ekle:
item.cpp:
Genişlet Daralt Kopyala
#ifdef SHOW_DROPPED_ITEM_INFORMATION
#include "mob_manager.h"
const char * CItem::GetName()
{
    static char szItemName[128];
    memset(szItemName, 0, sizeof(szItemName));
    if (GetProto())
    {
        int len = 0;
        switch (GetType())
        {
            case ITEM_POLYMORPH:
            {
                const DWORD dwMobVnum = GetSocket(0);
                const CMob* pMob = CMobManager::instance().Get(dwMobVnum);
                if (pMob)
                    len = snprintf(szItemName, sizeof(szItemName), "%s", pMob->m_table.szLocaleName);

                break;
            }
            case ITEM_SKILLBOOK:
            case ITEM_SKILLFORGET:
            {
                const DWORD dwSkillVnum = (GetVnum() == ITEM_SKILLBOOK_VNUM || GetVnum() == ITEM_SKILLFORGET_VNUM) ? GetSocket(0) : 0;
                const CSkillProto* pSkill = (dwSkillVnum != 0) ? CSkillManager::instance().Get(dwSkillVnum) : NULL;
                if (pSkill)
                    len = snprintf(szItemName, sizeof(szItemName), "%s", pSkill->szName);

                break;
            }
        }
        len += snprintf(szItemName + len, sizeof(szItemName) - len, (len>0)?" %s":"%s", GetProto()->szLocaleName);
    }

    return szItemName;
}
#endif

Bu şekilde sorunu çözdüm kanıt:
0428_211634.webp



Şimdi bir sorun daha gözlemledim beceri kitabını atarken ismi beceri kitabı olarak yazıyor orayı nasıl düzeltebilirim ?

0428_211744.webp



Bir diğer sorunum ise yansıtma sırasında isminin gözükmemesi resimdeki gibi oluyor ;
0428_215121.webp


Yansıtma sorunun çözümü:
Çözüm;
Arat
PythonPlayerModule.cpp:
Genişlet Daralt Kopyala
PyObject* playerGetItemLink(PyObject* poSelf, PyObject* poArgs)
{
Bul
C++:
Genişlet Daralt Kopyala
            if (pPlayerItem->aAttr[i].bType != 0) // burası olmaya bilir !!! if kısmı sadece
            {
                len += snprintf(itemlink + len, sizeof(itemlink) - len, ":%x:%d",
                    pPlayerItem->aAttr[i].bType, pPlayerItem->aAttr[i].sValue);
                isAttr = true;
            }
Yukarıdakinin altındaki
C++:
Genişlet Daralt Kopyala
        if (GetDefaultCodePage() == CP_ARABIC)
        {
            if (isAttr)
                //"item:¹øÈ£:Ç÷¡±×:¼ÒÄÏ0:¼ÒÄÏ1:¼ÒÄÏ2"
            {
                snprintf(buf, sizeof(buf), " |h|r[%s]|cffffc700|H%s|h", pItemData->GetName(), itemlink);
            }
            else
            {
                snprintf(buf, sizeof(buf), " |h|r[%s]|cfff1e6c0|H%s|h", pItemData->GetName(), itemlink);
            }
        }
        else
        {
            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());
            }
        }
Değiştir
C++:
Genişlet Daralt Kopyala
#ifdef SHOW_DROPPED_ITEM_INFORMATION
        char szText[128];
        memset(szText, 0, sizeof(szText));
        if (pItemData->GetIndex() == 50300)
        {
            CPythonSkill::SSkillData* c_pSkillData;
            CPythonSkill::Instance().GetSkillData(pPlayerItem->alSockets[0], &c_pSkillData);
            sprintf(szText, "%s %s", c_pSkillData->strName.c_str(), pItemData->GetName());
        }
        else if (pItemData->GetType() == 19)
        {
            CPythonNonPlayer& rkNonPlayer = CPythonNonPlayer::Instance();
            sprintf(szText, "%s %s", rkNonPlayer.GetMonsterName(pPlayerItem->alSockets[0]), pItemData->GetName());
        }
        else
        {
            sprintf(szText, "%s", pItemData->GetName());
        }
        if (pPlayerItem->count > 1)
            if (isAttr)
                snprintf(buf, sizeof(buf), "|cffffc700|H%s|h[%s x%d]|h|r", itemlink, szText, pPlayerItem->count);
            else
                snprintf(buf, sizeof(buf), "|cfff1e6c0|H%s|h[%s x%d]|h|r", itemlink, szText, pPlayerItem->count);
        else
            if (isAttr)
                snprintf(buf, sizeof(buf), "|cffffc700|H%s|h[%s]|h|r", itemlink, szText);
            else
                snprintf(buf, sizeof(buf), "|cfff1e6c0|H%s|h[%s]|h|r", itemlink, szText);
#else
        if (GetDefaultCodePage() == CP_ARABIC)
        {
            if (isAttr)
                //"item:¹øÈ£:Ç÷¡±×:¼ÒÄÏ0:¼ÒÄÏ1:¼ÒÄÏ2"
            {
                snprintf(buf, sizeof(buf), " |h|r[%s]|cffffc700|H%s|h", pItemData->GetName(), itemlink);
            }
            else
            {
                snprintf(buf, sizeof(buf), " |h|r[%s]|cfff1e6c0|H%s|h", pItemData->GetName(), itemlink);
            }
        }
        else
        {
            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());
            }
        }
#endif
 
Son düzenleme:
İtemi atarken beceri kitabı yazan kısmı nereden çekiyor bilen varmı orayıda düzelteyim ?

Arkadaşlar bilen yokmu şu beceri kitabı ismini nereden çektiğini söyleyebilecek biri ? yere atarken evet hayır kısmındaki beceri kitabı ismini düzenlemem gerekiyor src kısmında hangi fonksiyon yapıyor bu işlevi @Kaiser
1745868702342.webp
 
Son düzenleme:
Geri
Üst