Çözüldü Bir cpp dosyasına item type bilgisi çekmek istiyorum.

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

asilords

MT Üye
MT Üye
Mesaj
477
Çözümler
18
Beğeni
139
Puan
749
Ticaret Puanı
0
başa
#include "PythonItem.h"
ekledim

kod kısmına şu şekilde yapmaya çalıştım

CItemData * item;
if (item->GetType() == CItemData::ITEM_TYPE_WEAPON)
c_d3dColor = c_TextTail_new_item_Color;

kod bilgim zayıf oldugu için başaramadım yardımcı olursanız sevinirim.
 
Çözüm
Tamam şimdi anladım.
Uzun vadeli kullanım için hiçbir sisteme bağımlı olmadan ufak ve esnek bir yapı hazırladım. Bunu kullanabilirsin.
Defineli eklemek istersen kendince bir define adı uydurabilirsin, ben düz yazdım.

PythonTextTail.h dosyasına:
C++:
Genişlet Daralt Kopyala
void Render();
//Altına ekle:

D3DXCOLOR GetItemTextColor(CItemData& pItemData);

PythonTextTail.cpp(en üstlerde):
C++:
Genişlet Daralt Kopyala
const D3DXCOLOR c_TextTail_Item_Color = D3DXCOLOR (1.0f, 1.0f, 1.0f, 1.0f);
//Altına ekle:
D3DXCOLOR itemTextColor = c_TextTail_Item_Color;

Aynı dosyada şunu bul:
C++:
Genişlet Daralt Kopyala
void CPythonTextTail::RegisterItemTextTail(....)
{
   
}
Altına ekle:
C++:
Genişlet Daralt Kopyala
D3DXCOLOR CPythonTextTail::GetItemTextColor(CItemData& pItemData)
{
    switch (pItemData.GetType())
    {...
Nasıl bir senaryo istediğinden emin değilim ama vnuma göre yapmak istersen aşağıdaki gibi yapabilirsin. ITEM_VNUM kısmına itemin vnumunu aktarman gerek.
C++:
Genişlet Daralt Kopyala
CItemData* itemData;
if (!CItemManager::Instance().GetItemDataPointer(ITEM_VNUM, &itemData))
    return;
if (itemData->GetType() == CItemData::ITEM_TYPE_WEAPON)
    c_d3dColor = c_TextTail_new_item_Color;

Alternatif:
C++:
Genişlet Daralt Kopyala
CItemData * itemData = CItemManager::Instance().GetSelectedItemDataPointer();
if(itemData && itemData->GetType() == CItemData::ITEM_TYPE_WEAPON)
    c_d3dColor = c_TextTail_new_item_Color;
 
Nasıl bir senaryo istediğinden emin değilim ama vnuma göre yapmak istersen aşağıdaki gibi yapabilirsin. ITEM_VNUM kısmına itemin vnumunu aktarman gerek.
C++:
Genişlet Daralt Kopyala
CItemData* itemData;
if (!CItemManager::Instance().GetItemDataPointer(ITEM_VNUM, &itemData))
    return;
if (itemData->GetType() == CItemData::ITEM_TYPE_WEAPON)
    c_d3dColor = c_TextTail_new_item_Color;

Alternatif:
C++:
Genişlet Daralt Kopyala
CItemData * itemData = CItemManager::Instance().GetSelectedItemDataPointer();
if(itemData && itemData->GetType() == CItemData::ITEM_TYPE_WEAPON)
    c_d3dColor = c_TextTail_new_item_Color;
Dediğiniz gibi yaptım build aldım ama çalışmadı.

ENABLE_EXTENDED_ITEMNAME sisteminde yere atılan item efsunluysa rengi sarı oluyor ben bunu şöyle değğiştirmek istiyorum yere atılan item silah ise rengi değişsin zırh ise şu renk olsun vs diye çoğaltıcam ama çalışmadı.


1:
Genişlet Daralt Kopyala
#ifdef ENABLE_EXTENDED_ITEMNAME
    D3DXCOLOR c_d3dColor = c_TextTail_Item_Color;
    CItemData * itemData = CItemManager::Instance().GetSelectedItemDataPointer();
    //if (bHasAttr)
    //    c_d3dColor = c_TextTail_SpecialItem_Color;
    if(itemData && itemData->GetType() == CItemData::ITEM_TYPE_WEAPON)
        c_d3dColor = c_TextTail_SpecialItem_Color;
    TTextTail * pTextTail = RegisterTextTail(VirtualID, c_szText, pOwner, c_TextTail_Name_Position, c_d3dColor);
#else
    TTextTail * pTextTail = RegisterTextTail(VirtualID, c_szText, pOwner, c_TextTail_Name_Position, c_TextTail_Item_Color);
#endif
 
Tamam şimdi anladım.
Uzun vadeli kullanım için hiçbir sisteme bağımlı olmadan ufak ve esnek bir yapı hazırladım. Bunu kullanabilirsin.
Defineli eklemek istersen kendince bir define adı uydurabilirsin, ben düz yazdım.

PythonTextTail.h dosyasına:
C++:
Genişlet Daralt Kopyala
void Render();
//Altına ekle:

D3DXCOLOR GetItemTextColor(CItemData& pItemData);

PythonTextTail.cpp(en üstlerde):
C++:
Genişlet Daralt Kopyala
const D3DXCOLOR c_TextTail_Item_Color = D3DXCOLOR (1.0f, 1.0f, 1.0f, 1.0f);
//Altına ekle:
D3DXCOLOR itemTextColor = c_TextTail_Item_Color;

Aynı dosyada şunu bul:
C++:
Genişlet Daralt Kopyala
void CPythonTextTail::RegisterItemTextTail(....)
{
   
}
Altına ekle:
C++:
Genişlet Daralt Kopyala
D3DXCOLOR CPythonTextTail::GetItemTextColor(CItemData& pItemData)
{
    switch (pItemData.GetType())
    {
        case CItemData::ITEM_TYPE_WEAPON:
            itemTextColor = D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f); // kırmızı
            break;

        case CItemData::ITEM_TYPE_ARMOR:
            itemTextColor = D3DXCOLOR(0.0f, 0.3f, 1.0f, 1.0f); // mavi
            break;
           
        default:
            itemTextColor = c_TextTail_Item_Color; // varsayilani döndür
            break;
    }
    return itemTextColor; 
}

Bir üstteki RegisterItemTextTail fonksiyonu içindeki şu satırı:
C++:
Genişlet Daralt Kopyala
TTextTail * pTextTail = RegisterTextTail (VirtualID, c_szText, pOwner, c_TextTail_Name_Position, c_TextTail_Item_Color);
Şu şekilde değiştir(en sondaki argüman):
C++:
Genişlet Daralt Kopyala
TTextTail * pTextTail = RegisterTextTail (VirtualID, c_szText, pOwner, c_TextTail_Name_Position, itemTextColor);


Son olarak PythonItem.cpp içindeki CreateItem fonksiyonunun en sonunda şunu göreceksin:
C++:
Genişlet Daralt Kopyala
CPythonTextTail& rkTextTail = CPythonTextTail::Instance();
Bunun hemen bir altına şunu ekle:
C++:
Genişlet Daralt Kopyala
rkTextTail.GetItemTextColor(*pItemData);

Yere atılan itemlerde ve metinlerden/canavarlardan düşen itemlerde çalışır.

(Renkler koyu olduğundan ekran görüntüsünde patladı..)
Ekran görüntüsü 2025-07-23 195901.webp
 
Çözüm
Tamam şimdi anladım.
Uzun vadeli kullanım için hiçbir sisteme bağımlı olmadan ufak ve esnek bir yapı hazırladım. Bunu kullanabilirsin.
Defineli eklemek istersen kendince bir define adı uydurabilirsin, ben düz yazdım.

PythonTextTail.h dosyasına:
C++:
Genişlet Daralt Kopyala
void Render();
//Altına ekle:

D3DXCOLOR GetItemTextColor(CItemData& pItemData);

PythonTextTail.cpp(en üstlerde):
C++:
Genişlet Daralt Kopyala
const D3DXCOLOR c_TextTail_Item_Color = D3DXCOLOR (1.0f, 1.0f, 1.0f, 1.0f);
//Altına ekle:
D3DXCOLOR itemTextColor = c_TextTail_Item_Color;

Aynı dosyada şunu bul:
C++:
Genişlet Daralt Kopyala
void CPythonTextTail::RegisterItemTextTail(....)
{
   
}
Altına ekle:
C++:
Genişlet Daralt Kopyala
D3DXCOLOR CPythonTextTail::GetItemTextColor(CItemData& pItemData)
{
    switch (pItemData.GetType())
    {
        case CItemData::ITEM_TYPE_WEAPON:
            itemTextColor = D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f); // kırmızı
            break;

        case CItemData::ITEM_TYPE_ARMOR:
            itemTextColor = D3DXCOLOR(0.0f, 0.3f, 1.0f, 1.0f); // mavi
            break;
           
        default:
            itemTextColor = c_TextTail_Item_Color; // varsayilani döndür
            break;
    }
    return itemTextColor; // varsayilani döndür
}

Bir üstteki RegisterItemTextTail fonksiyonu içindeki şu satırı:
C++:
Genişlet Daralt Kopyala
TTextTail * pTextTail = RegisterTextTail (VirtualID, c_szText, pOwner, c_TextTail_Name_Position, c_TextTail_Item_Color);
Şu şekilde değiştir(en sondaki argüman):
C++:
Genişlet Daralt Kopyala
TTextTail * pTextTail = RegisterTextTail (VirtualID, c_szText, pOwner, c_TextTail_Name_Position, itemTextColor);


Son olarak PythonItem.cpp içindeki CreateItem fonksiyonunun en sonunda şunu göreceksin:
C++:
Genişlet Daralt Kopyala
CPythonTextTail& rkTextTail = CPythonTextTail::Instance();
Bunun hemen bir altına şunu ekle:
C++:
Genişlet Daralt Kopyala
rkTextTail.GetItemTextColor(*pItemData);

Yere atılan itemlerde ve metinlerden/canavarlardan düşen itemlerde çalışır.

(Renkler koyu olduğundan ekran görüntüsünde patladı..)
24887 eklentisini görüntüle
Üstad bu işi biliyorsun 2 dakikada yapmışsın sistemi. Harcadıgın zamandan dolayı teşekkür ediyorum harikasın.
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst