Sosyal açıldı! Bir göz at → Hemen gir →

YARDIM KO v25xx - CN3UIImage item icon texture değiştirme (SetTex / LoadTexture) fonksiyonu aranıyor

KY Üye
KAYIT
26 Ara 2025
Mesajlar
24
Tepki puanı
1
Yaş
36
Konum
Antalya
Kullanılan Source
HSACSX SRGAME
Kullanılan Database
HSACSX
Kullanılan Client
HSACSX
Kullanılan Web Panel
xxx
Versiyon
2525
Merhaba,

v25xx client üzerinde Collection Race benzeri bir pencereye item ikonları basmaya çalışıyorum.

Şu an:
  • Packet parse çalışıyor.
  • Item ID geliyor.
  • Icon path doğru üretiliyor.

Örnek:
ui\itemicon_3_8919_70_0.dxt
ui\itemicon_3_8919_80_0.dxt
ui\itemicon_3_8919_90_0.dxt

UI tarafında CN3UIImage objelerini bulabiliyorum.
texture ptr = +0x114
path string = +0x120
Ancak client içerisinde çalışan gerçek texture bind fonksiyonunu bulamadım.

Aradığım şey:
  • CN3UIImage::SetTex(...)
  • CN3UIImage::Load(...)
  • CN3Texture yükleme fonksiyonu
  • Texture manager üzerinden image değiştirme örneği
  • Runtime'da bir CN3UIImage'nin item icon texture'sını değiştiren çalışan örnek kod
Elinde:
  • v25xx
  • hsacsx
kaynaklarından herhangi bir örnek bulunan varsa paylaşabilir mi?

Özellikle bir CN3UIImage'ye
ui\itemicon_3_xxxx_xx_0.dxt
yükleyen çalışan kod örneği arıyorum.

Packet, UI parse ve child bulma tarafı tamam.
Sorun sadece texture bind aşamasında.

Teşekkürler.
 
KY Saygın Üye
Coder
KAYIT
2 Şub 2022
Mesajlar
318
Tepki puanı
483
Yaş
42
Konum
Antalya
Sorun render versiyonu. Projende pus var ise pustan ornege bakmalisin zaten pus dada icon basip render ediyorsun yapi ayni. Cr uifi parse struck hiza opcode gibi verilerin dogru ise renderi da pustan ornek al muhtemelen cozersin.
 
KY Kıdemli Üye
KAYIT
3 Haz 2026
Mesajlar
351
Çözümler
1
Tepki puanı
233
Yaş
47
Konum
Earth
Web
atlaspvp.online
ücreti mukabilinde yardımcı olunur.
 
S.Moderatör
KY Saygın Üye
Coder
ACS Sağlayıcısı
Server Sahibi
KAYIT
21 Ağu 2022
Mesajlar
248
Çözümler
10
Tepki puanı
502
Yaş
37
Merhaba,

v25xx client üzerinde Collection Race benzeri bir pencereye item ikonları basmaya çalışıyorum.

Şu an:
  • Packet parse çalışıyor.
  • Item ID geliyor.
  • Icon path doğru üretiliyor.

Örnek:
ui\itemicon_3_8919_70_0.dxt
ui\itemicon_3_8919_80_0.dxt
ui\itemicon_3_8919_90_0.dxt

UI tarafında CN3UIImage objelerini bulabiliyorum.
texture ptr = +0x114
path string = +0x120
Ancak client içerisinde çalışan gerçek texture bind fonksiyonunu bulamadım.

Aradığım şey:
  • CN3UIImage::SetTex(...)
  • CN3UIImage::Load(...)
  • CN3Texture yükleme fonksiyonu
  • Texture manager üzerinden image değiştirme örneği
  • Runtime'da bir CN3UIImage'nin item icon texture'sını değiştiren çalışan örnek kod
Elinde:
  • v25xx
  • hsacsx
kaynaklarından herhangi bir örnek bulunan varsa paylaşabilir mi?

Özellikle bir CN3UIImage'ye
ui\itemicon_3_xxxx_xx_0.dxt
yükleyen çalışan kod örneği arıyorum.

Packet, UI parse ve child bulma tarafı tamam.
Sorun sadece texture bind aşamasında.

Teşekkürler.
Dm den iletişime geçersem fiyat bilgisi vereceğim
 
KY Üye
KAYIT
26 Ara 2025
Mesajlar
24
Tepki puanı
1
Yaş
36
Konum
Antalya
Sorunum bir başka forumdaki arkadaşın bir yorumu ile çözülmüştür. Yorumu aşağıya bırakıyorum. Konu kapatılabilir.
" xx sitesinde yorum "

Aradığın fonksiyon: CN3UIImage::SetTex


void CN3UIImage::SetTex(const std::string& szFN)
{
m_szTexFN = szFN;
s_MngTex.Delete(&m_pTexRef); // eski referansi birak (refcount!)

if (!(UISTYLE_IMAGE_ANIMATE & m_dwStyle))
m_pTexRef = s_MngTex.Get(szFN); // CN3Mng<CN3Texture>, ref sayacli havuz
}

Ayrı bir "texture manager üzerinden değiştirme" API'si yok — tek yol bu. s_MngTex = CN3Base::s_MngTex (static CN3Mng<CN3Texture>, N3Base.h:188). Get() içeride yoksa new CN3Texture + LoadFromFile(szFN) yapar.

Render tarafı sadece şunu yapıyor (N3UIImage.cpp:176):
if (m_pVB != nullptr && m_pTexRef != nullptr) {
s_lpD3DDev->SetStreamSource(0, m_pVB, 0, sizeof(__VertexTransformed));
s_lpD3DDev->SetFVF(FVF_TRANSFORMED);
s_lpD3DDev->SetTexture(0, m_pTexRef->Get());
...
}

Çalışan runtime örneği (bizim istemcide üretimde)

Görev penceresinde ödül item ikonlarını çalışma anında basıyoruz:

// 1) Ikonu olustur — bos bir "area" dugumunun bolgesini kullaniyoruz
CN3UIImage* pIcon = new CN3UIImage();
pIcon->Init(pParent); // DIKKAT: Init zaten cocuk listesine EKLER
pIcon->SetRegion(pArea->GetRegion());
pIcon->SetUVRect(0.0f, 0.0f, 45.0f/64.0f, 45.0f/64.0f); // <<< bkz. asagisi
pIcon->SetVisible(false);

// 2) Item degisince sadece bu
pIcon->SetVisible(!szIconFN.empty());
if (!szIconFN.empty())
pIcon->SetTex(szIconFN); // "UI\\ItemIcon_3_8919_70_0.dxt"

Muhtemelen sıradaki takılacağın yer — UV

Item ikonu 64×64 dokunun sadece SOL-ÜST 45×45'inde durur. UV'yi 0..1 bırakırsan ikon köşede küçücük kalır + etrafı boş çıkar. Oyunun her yeri (envanter, depo, takas) bu oranı kullanıyor:

static constexpr float ITEM_ICON_UV = 45.0f / 64.0f; // = 0.703125

Ve önemli bir tuzak: SetTex() vertex buffer'ı yeniden kurmaz. UV'ler VB'nin içinde yaşıyor; sadece SetUVRect() / SetRegion() / MoveOffset() SetVB() çağırıyor. Yani ikon adı değişince SetTex yeter ama slotun UV'si bir kez doğru kurulmuş olmalı.

Dosya adı formülü (seninki zaten doğru)

GameBase.cpp:714 — MakeResrcFileNameForUPC:
fmt::format("UI\\ItemIcon_{:01}_{:04}_{:02}_{:01}.dxt",
iIDIcon / 10000000, (iIDIcon / 1000) % 10000, (iIDIcon / 10) % 100, iIDIcon % 10);
Senin 3_8919_70_0 → iIDIcon = 38919700. Formülle birebir uyuyor. Not: ikon ID'si Item_Ext'teki dwIDIcon ile override edilebiliyor (isimlendirilmiş varyantların kendi ikonu olur), Item_Org'unkini körlemesine kullanma.

Pointer'ı elle yazma tuzağı

+0x114'e (m_pTexRef) doğrudan pointer yazarsan CN3Mng'in referans sayacı bozbırakılmaz, yenisi başkası tarafından Delete edilince dangling kalır. GerçekSetTex'i çağır (o s_MngTex.Delete(&m_pTexRef) yapıyor).

Offset doğrulaman için üye sıralaması (derleyici/STL sürümüne göre bayt ofsetleri kayar, sıra sabit):
CN3UIBase ...
LPDIRECT3DVERTEXBUFFER9 m_pVB
CN3Texture* m_pTexRef <- senin +0x114
std::string m_szTexFN <- senin +0x120 buranin ic pointer'i olmali
__FLOAT_RECT m_frcUVRect (4 float, 0..1 — layout'u buradan
D3DCOLOR m_Color
float m_fAnimFrame
int m_iAnimCount
float m_fCurAnimFrame
CN3UIImage** m_pAnimImagesRef
 
Üst Alt