Bildiğiniz üzere DevIL kütüphanesinin güncel sürümlerini kullandığımızda, oyun içerisinde lonca simgelerinde bozulmalar/sorunlar yaşanıyordu. Bu sorunu aşmak için normalde DevIL'in kaynak kodlarındaki il_targa.cpp dosyasını düzenleyip kütüphaneyi sıfırdan derlemek gerekiyordu.
Artık kütüphaneyi yeniden derlemekle uğraşmanıza gerek yok! Aşağıdaki pratik kod düzenlemeleri sayesinde sorunu doğrudan Client ve Server kaynak kodlarınız üzerinden kolayca çözebilirsiniz.
Değiştirin:
Bu fonksiyonun içerisinde şu satırları bulun:
Hemen altına ekleyin:
Şu satırları bulun:
Hemen altına ekleyin:
Hayırlı olsun, sorunsuz kullanımlar!
Artık kütüphaneyi yeniden derlemekle uğraşmanıza gerek yok! Aşağıdaki pratik kod düzenlemeleri sayesinde sorunu doğrudan Client ve Server kaynak kodlarınız üzerinden kolayca çözebilirsiniz.
1. Client Tarafı Düzenlemeleri
A. Macro Tanımlaması
client/source/UserInterface/Locale_inc.h dosyasını açın ve uygun bir yere ekleyin:
C++:
#define ENABLE_GUILD_MARK_FIXED
B. GuildMarkUploader.cpp Düzenlemesi
client/source/UserInterface/GuildMarkUploader.cpp dosyasını açın ve aşağıdaki bloğu aratın:
C++:
ilConvertImage(IL_BGRA, IL_BYTE);
ilCopyPixels(0, 0, 0, SGuildMark::WIDTH, SGuildMark::HEIGHT, 1, IL_BGRA, IL_BYTE, (void*)m_kMark.m_apxBuf);
Değiştirin:
C++:
#ifdef ENABLE_GUILD_MARK_FIXED
ilConvertImage(IL_BGRA, IL_UNSIGNED_BYTE);
ilCopyPixels(0, 0, 0, SGuildMark::WIDTH, SGuildMark::HEIGHT, 1, IL_BGRA, IL_UNSIGNED_BYTE, (void*)m_kMark.m_apxBuf);
#else
ilConvertImage(IL_BGRA, IL_BYTE);
ilCopyPixels(0, 0, 0, SGuildMark::WIDTH, SGuildMark::HEIGHT, 1, IL_BGRA, IL_BYTE, (void*)m_kMark.m_apxBuf);
#endif
C. MarkImage.cpp Düzenlemesi
client/source/UserInterface/MarkImage.cpp dosyasını açın ve CGuildMarkImage::Save fonksiyonunu aratın:
C++:
bool CGuildMarkImage::Save(const char* c_szFileName)
Bu fonksiyonun içerisinde şu satırları bulun:
C++:
if (!ilSave(IL_TGA, (const ILstring)c_szFileName))
return false;
Hemen altına ekleyin:
C++:
#ifdef ENABLE_GUILD_MARK_FIXED
FILE* fp = fopen(c_szFileName, "r+b");
if (fp)
{
fseek(fp, 17, SEEK_SET);
fputc(0x00, fp);
fclose(fp);
}
#endif
2. Server Tarafı Düzenlemeleri
A. Service.h Tanımlaması
server/source/game/src/service.h (veya kullandığınız yapıya göre Common/service.h) dosyasını açın ve ekleyin:
C++:
#define ENABLE_GUILD_MARK_FIXED
B. MarkImage.cpp Düzenlemesi
server/source/game/src/MarkImage.cpp dosyasını açın ve CGuildMarkImage::Save fonksiyonunu aratın:
C++:
bool CGuildMarkImage::Save(const char* c_szFileName)
Şu satırları bulun:
C++:
if (!ilSave(IL_TGA, (const ILstring)c_szFileName))
return false;
Hemen altına ekleyin:
C++:
#ifdef ENABLE_GUILD_MARK_FIXED
FILE* fp = fopen(c_szFileName, "r+b");
if (fp)
{
fseek(fp, 17, SEEK_SET);
fputc(0x00, fp);
fclose(fp);
}
#endif
Neden Bu Çözüm Çalışıyor? (Teknik Detay)
- IL_BYTE yerine IL_UNSIGNED_BYTE kullanımı, piksel renk verilerinin işaret hatasına düşmeden doğru aralıkta (0-255) işlenmesini sağlar.
- fopen ile dosyanın 17. baytına (0x00) yazılan değer ise TGA başlığındaki (header) görüntü yönü / descriptor baytını sıfırlayarak ters dönme veya bozuk taranma sorununu doğrudan dosya üzerinde düzeltir.
Hayırlı olsun, sorunsuz kullanımlar!
