--[[ c_models.lua v1.2 Carrega modelos de terreno customizados da Mansão Maddoog. Mapeamento confirmado por inspeção binária dos arquivos: ┌─────────────────┬──────────────────────┬──────────────────────┬─────────────────────────┐ │ DFF │ TXD │ COL (arquivo→nome) │ Notas │ ├─────────────────┼──────────────────────┼──────────────────────┼─────────────────────────┤ │ cunteground21 │ lahillsground4cye │ countrye_1 → mesmo │ ID SA: 12905 │ │ cunteground23 │ ce_ground02 │ lahills_1 → cuntEground23│ ID SA: 12907 │ │ hillseast05_lae │ easthills_lahills │ lahills_1 → HillsEast05_LAe│ ID via lookup │ │ Gs_piccies1 │ — │ — │ decoração/quadros │ └─────────────────┴──────────────────────┴──────────────────────┴─────────────────────────┘ engineLoadCOL com múltiplos modelos dentro: o MTA aplica todos de uma vez. Chamamos engineReplaceCOL(col, modelID) — ele usa o nome interno do COL para associar ao modelo correto. Ordem obrigatória por modelo: TXD → COL → DFF --]] -- Cache de COLs já carregados (evita carregar o mesmo arquivo duas vezes) local colCache = {} local function loadCOL(filename) if not colCache[filename] then colCache[filename] = engineLoadCOL(filename) if not colCache[filename] then outputConsole("[maddoog] ERRO ao carregar COL: " .. filename) end end return colCache[filename] end -- ─── Modelos de terreno ─────────────────────────────────────────────────────── -- Para IDs de mapa (tiles de terreno) usamos engineGetModelIDFromName() -- e logremos o resultado para depuração. local TERRAIN = { { nome = "cunteground21", dff = "cunteground21.dff", txd = "lahillsground4cye.txd", col = "countrye_1.col", -- tem 'cunteground21' dentro idFallback = 12905, }, { nome = "cunteground23", dff = "cunteground23.dff", txd = "ce_ground02.txd", col = "lahills_1.col", -- tem 'cuntEground23' dentro idFallback = 12907, }, { nome = "hillseast05_lae", dff = "hillseast05_lae.dff", txd = "easthills_lahills.txd", col = "lahills_1.col", -- tem 'HillsEast05_LAe' dentro idFallback = nil, -- ID desconhecido, só via lookup }, { nome = "Gs_piccies1", dff = "Gs_piccies1.dff", txd = nil, col = nil, idFallback = nil, }, } local function carregarModelos() for _, m in ipairs(TERRAIN) do -- Descobrir ID: lookup primeiro, fallback se disponível local modelID = engineGetModelIDFromName(m.nome) if not modelID and m.idFallback then modelID = m.idFallback end if not modelID then outputConsole("[maddoog] AVISO: ID não encontrado para '" .. m.nome .. "' — pulando.") else outputConsole("[maddoog] Carregando '" .. m.nome .. "' ID=" .. modelID) -- 1) TXD if m.txd then local txd = engineLoadTXD(m.txd) if txd then engineImportTXD(txd, modelID) else outputConsole("[maddoog] ERRO TXD: " .. m.txd) end end -- 2) COL (antes do DFF para colisão funcionar) if m.col then local col = loadCOL(m.col) if col then engineReplaceCOL(col, modelID) else outputConsole("[maddoog] ERRO COL: " .. m.col) end end -- 3) DFF por último if m.dff then local dff = engineLoadDFF(m.dff) if dff then engineReplaceModel(dff, modelID) outputConsole("[maddoog] OK: " .. m.nome .. " (ID " .. modelID .. ")") else outputConsole("[maddoog] ERRO DFF: " .. m.dff) end end end end end addEventHandler("onClientResourceStart", resourceRoot, carregarModelos)