Pergunta sincera:
O cliente possui diversos bugs graves. Um deles é erro na textura após alguns minutos.
Ex:
// No .h: IDirect3DTexture9* m_ppUITexture[512];
// No .cpp: Acessa até índice 999 (MAX_UI_TEXTURE = 1000)
IDirect3DTexture9* TextureManager::GetUITexture(int nIndex, DWORD showTime)
{
if (nIndex < 0 || nIndex > MAX_UI_TEXTURE) // MAX_UI_TEXTURE = 1000
return nullptr;
if (m_ppUITexture[nIndex] != nullptr) // SE nIndex > 511: BUFFER OVERFLOW!
Resultado:
Índices 512-999 acessam memória fora do array m_ppUITexture[512]
Pode sobrescrever outros dados (outros arrays, variáveis, código),
Texturas brancas porque retorna L1xo da memória (Isso ocorre após uns minutos),
Crash aleatório quando corrompe memória crítica (ocorre em menos de 2 minutos após as texturas brancas).
A pergunta é: Como praticamente todos os códigos "desse programador" cujo nome aparece ao abrir o TMSrv possuem falhas graves, isso é proposital ou é inexperiência crônica e desleixo por parte dele?
fread(m_stUITextureList, sizeof(m_stUITextureList), 1, fpBin);
// m_stUITextureList tem 1000 elementos
// Mas no .h: stTextureListInfo m_stUITextureList[MAX_UI_TEXTURE]; // 1000 ✓
// No .cpp: stTextureListInfo m_stUITextureList[512]; // SÓ 512!
Se o arquivo .bin tem 1000 entradas:
Lê 1000 registros × sizeof(stTextureListInfo)
Mas array só tem espaço para 512
Buffer overflow corrompe memória adjacente
Informações de textura ficam corrompidas
Texturas carregam com formato/alfa errado ( brancas)
O Código de Debug no .cpp Confirma
for (int i = 0; i < 1000; ++i) // Itera até 1000!
{
// Modifica m_stUITextureList
// Para i > 511: CORROMPE MEMÓRIA!
if (i == 396) // Índice 396 ainda é válido (dentro de 512)
{
sprintf(m_stUITextureList.szFileName, "UI\\select06.wyt");
m_stUITextureList.cAlpha = 65;
}
}
Ele sabia do problema e tentou corrigir alguns índices?
Edit: Após a correçao, o cliente tá rodando sem falhas.
Vou testar por mais um tempo.