Asuramaru Posted June 1, 2023 Share Posted June 1, 2023 Eu estou convertendo um mapa enorme de vários quilômetros, porém depois de montado percebi que a distancia na qual os objetos renderiam é muito baixa, e de longe fica o objeto original do GTA, apenas quando chega mais perto ele se transforma na parte da pista Esse é o modelo de longe (a montanha) Ai quando eu chego perto ela se transforma no objeto normal, estou usando mod de draw distance para tentar amenizar porém só mudou a distancia na qual eu vejo os objetos originais do jogo, não ajudou a renderizar os objetos do mod em si, já tentei modificar o LOD dentro do mod da pista, mas sem sucesso. Alguem pode me ajudar me dando uma dica de como resolver essa questão pfv, ou como eu poderia estar contornando esse problema. Link to comment
Other Languages Moderators Lord Henry Posted June 2, 2023 Other Languages Moderators Share Posted June 2, 2023 (edited) Em caso de mapas que utilizam muitos objetos para substituir, é mais recomendado que você coloque-os em IDs vazios em vez de usar os IDs de objetos nativos. Você pode alocar os IDs vazios para usar nos objetos novos com engineRequestModel. -- Tabela com todas as posições dos objetos. local locations = { -- [Index] = {px, py, pz, rx, ry, rz} [1] = {2830.4, -2006.87, 23.431, 0, 0, 90}, [2] = {2627.66, -2162.95, 23.63, 0, 0, 0}, } -- Tabela com os nomes dos arquivos .col, .txd e .dff, precisa estar na mesma ordem das locations. local models = { [1] = "models/station", -- Cada objeto precisa ter seu .col, .txd e .dff com o mesmo nome. [2] = "models/track01", -- Neste exemplo, os arquivos estão dentro de uma pasta chamada "models" dentro do resource. } local allocatedIDs = {} -- Tabela onde os IDs gerados vão ficar. Pois você precisa deletá-los ao desligar este resource. addEventHandler ("onClientResourceStart", resourceRoot, function () -- Ativa essa função quando este resource for iniciado. for i, item in ipairs (locations) do -- Para cada posição de objeto, faça: local x, y, z, rx, ry, rz = unpack(item) local ID = engineRequestModel ("object") -- Gera um ID válido para objetos. local col = engineLoadCOL (models[i]..".col") local txd = engineLoadTXD (models[i]..".txd") local dff = engineLoadDFF (models[i]..".dff") engineReplaceCOL (col, ID) engineImportTXD (txd, ID) engineReplaceModel (dff, ID) engineSetModelLODDistance(ID, 170) -- Visível até 300 metros de distância. Não adianta colocar mais do que isso. createObject(ID, x, y, z, rx, ry, rz) -- Cria o objeto com o ID gerado. table.insert(allocatedIDs, ID) -- Insere o ID gerado na tabela de IDs gerados. end end) addEventHandler ("onClientResourceStop", resourceRoot, function () -- Ativa essa função quando este resource for desligado. for i,v in pairs(allocatedIDs) do -- Para cada ID gerado. engineFreeModel (v) -- Libera este ID da memória. end end) Se você quer que um objeto seja visível por mais do que 300 metros, será necessário criar um objeto LOD e vincular ele no seu objeto. Obviamente o objeto LOD terá um ID diferente do seu objeto vinculado. -- Cria um objeto normal. objNormal = createObject (3620, x, y, z, rx, ry, rz) -- Cria um objeto Low LOD. objLowLOD = createObject (5154, x, y, z, rx, ry, rz, true) -- O true desativa a colisão deste objeto e libera sua distância máxima para até 1000 metros. (Low LOD object) -- Vincula esse objeto Low LOD ao objeto normal. setLowLODElement (objNormal, objLowLOD) -- Define a distância de visão deste objeto Low LOD para o máximo. engineSetModelLODDistance (5154, 300) -- O 300 faz com que a distância do objeto seja máxima mesmo se o jogador configurar sua draw distance para o mínimo possível. -- Definir para 170 faz com que a distância do objeto seja máxima somente se o jogador definir sua draw distance para 100%. -- 170 evita que jogadores com PCs fracos tenham lag, permitindo que eles abaixem a distância dos objetos caso queiram, enquanto que 300 força todo mundo na distância máxima. Edited June 2, 2023 by Lord Henry 1 Link to comment
Recommended Posts