aka Blue Posted July 7, 2016 Share Posted July 7, 2016 Buenas. Últimamente estoy teniendo un pequeño problema con los mapas. Resulta que hoy los acabo de dividir en partes (como scripts, básicamente) para que no den mucho lag estando todos en un meta.xml y en un mismo script. El problema es que causa bastante lag en mi servidor y no entiendo por qué. Quisiera saber algunas funciones o métodos para que no cause tanto lag y optimizar los mapas. Gracias. Link to comment
Tomas Posted July 8, 2016 Share Posted July 8, 2016 Buenas. Últimamente estoy teniendo un pequeño problema con los mapas. Resulta que hoy los acabo de dividir en partes (como scripts, básicamente) para que no den mucho lag estando todos en un meta.xml y en un mismo script. El problema es que causa bastante lag en mi servidor y no entiendo por qué. Quisiera saber algunas funciones o métodos para que no cause tanto lag y optimizar los mapas.Gracias. Si los convertiste a script y estás usando createObject, crealos en el cliente (client-side). Link to comment
-Rex- Posted July 8, 2016 Share Posted July 8, 2016 Son .map En mi servidor se descargan mas o menos 13 mb de mapas y no da lag, Pueda que necesites una maquina mas potente Link to comment
Simple0x47 Posted July 8, 2016 Share Posted July 8, 2016 Transforma los .map ya que son archivos con una estructura XML lo que significa falta de optimización a createObjects en la parte servidor para evitar cargas inecesarias en el cliente. Esto aumenta la optimización considerablemente. Link to comment
aka Blue Posted July 8, 2016 Author Share Posted July 8, 2016 Bueno, haré un pequeño sistema como el que trae Paradise para sacar los datos .XML del mapa y convertirlos a lua, gracias. ¿Alguna otra recomendación? Link to comment
aka Blue Posted July 8, 2016 Author Share Posted July 8, 2016 Ya hice el sistema rápidamente y tal, funciona, pero quiero hacer que lea los mapas que están en una tabla y me he quedado atascado ahí... local mapas = { ["mapabase.map"] = true, } addEventHandler ( "onResourceStart", resourceRoot, function ( ) local map = xmlLoadFile ( "mapas/"..mapas[] ) if map then local children = xmlNodeGetChildren ( map ) for key, value in ipairs ( children ) do if xmlNodeGetName ( value ) == "object" then table.insert ( objetos, { x = tonumber( xmlNodeGetAttribute( value, "posX" ) ), y = tonumber( xmlNodeGetAttribute( value, "posY" ) ), z = tonumber( xmlNodeGetAttribute( value, "posZ" ) ), rx = tonumber( xmlNodeGetAttribute( value, "rotX" ) ) or 0, ry = tonumber( xmlNodeGetAttribute( value, "rotY" ) ) or 0, rz = tonumber( xmlNodeGetAttribute( value, "rotZ" ) ) or 0, model = tonumber( xmlNodeGetAttribute( value, "model" ) ), interior = tonumber( xmlNodeGetAttribute( value, "interior" ) ) or 0, alpha = tonumber( xmlNodeGetAttribute( value, "alpha" ) ) or 255, scale = tonumber( xmlNodeGetAttribute( value, "scale" ) ) or 1, doublesided = xmlNodeGetAttribute( value, "doublesided" ) == "false" and 1 or 0, colision = xmlNodeGetAttribute( value, "collisions" ) == "false" and 0 or 1, dimension = tonumber( xmlNodeGetAttribute( value, "dimension" ) ) or 0, } ) else outputDebugString ( "Unsopported element: "..xmlNodeGetName ( value ), 2 ) end end end end ) Link to comment
PezFenix2016 Posted July 8, 2016 Share Posted July 8, 2016 Ya hice el sistema rápidamente y tal, funciona, pero quiero hacer que lea los mapas que están en una tabla y me he quedado atascado ahí... Usan un for loop y luego usa otro para recorrer los valores de la tabla. function () for i, p in ipairs ( getElementsByType ( "player" ) ) do y for x = 1, #mapas do if ( string.find (mapas [ i ], 1, true ) == mapa ) then argumentos end Link to comment
aka Blue Posted July 8, 2016 Author Share Posted July 8, 2016 Vale, creo que ya lo tengo arreglado: local mapas = { "mapabase.map" } addEventHandler ( "onResourceStart", resourceRoot, function ( ) for k, v in ipairs ( mapas ) do outputDebugString ( tostring ( v ) ) local map = xmlLoadFile ( "mapas/"..mapas[1] ) if map then local children = xmlNodeGetChildren ( map ) for key, value in ipairs ( children ) do if xmlNodeGetName ( value ) == "object" then table.insert ( objetos, { x = tonumber( xmlNodeGetAttribute( value, "posX" ) ), y = tonumber( xmlNodeGetAttribute( value, "posY" ) ), z = tonumber( xmlNodeGetAttribute( value, "posZ" ) ), rx = tonumber( xmlNodeGetAttribute( value, "rotX" ) ) or 0, ry = tonumber( xmlNodeGetAttribute( value, "rotY" ) ) or 0, rz = tonumber( xmlNodeGetAttribute( value, "rotZ" ) ) or 0, model = tonumber( xmlNodeGetAttribute( value, "model" ) ), interior = tonumber( xmlNodeGetAttribute( value, "interior" ) ) or 0, alpha = tonumber( xmlNodeGetAttribute( value, "alpha" ) ) or 255, scale = tonumber( xmlNodeGetAttribute( value, "scale" ) ) or 1, doublesided = xmlNodeGetAttribute( value, "doublesided" ) == "false" and 0 or 1, colision = xmlNodeGetAttribute( value, "collisions" ) == "false" and 0 or 1, dimension = tonumber( xmlNodeGetAttribute( value, "dimension" ) ) or 0, } ) else outputDebugString ( "Unsopported element: "..xmlNodeGetName ( value ), 2 ) end end end end iniciarCreacion ( ) end ) Me printea correctamente el nombre de los mapas en la tabla. Ahora el problema viene en la creación. No crea los objetos: for k, v in ipairs ( objetos ) do local x, y, z = v.x, v.y, v.z local rotx, roty, rotz = v.rx, v.ry, v.rz local model = v.model local interior = v.interior local alpha = v.alpha local scale = v.scale local doublesided = v.doublesided local collisions = v.colision local dimension = v.dimension object = createObject ( model, x, y, z ) setElementRotation ( object, rotx, roty, rotz ) if doublesided == 1 then setElementDoubleSided ( object, true ) else setElementDoubleSided ( object, false ) end if collisions == 1 then setElementCollisionsEnabled ( object, true ) else setElementCollisionsEnabled ( object, false ) end setObjectScale ( object, scale ) setElementAlpha ( object, alpha ) end end Link to comment
aka Blue Posted July 9, 2016 Author Share Posted July 9, 2016 (edited) Up. He intentado pasarlo a client-side y tampoco me crea los objetos. Probé poniendo un outputDebugString para ver si ejecuta la función, y efectivamente me printea la misma cantidad de mensajes que objetos que hay en .maelero sigue sin crear el objeto. ¿Alguna solución? Edited July 9, 2016 by Guest Link to comment
aka Blue Posted July 9, 2016 Author Share Posted July 9, 2016 No, según la comprobación que hice, los crea Edito: Le hice un debugString a la función iniciarCreación, que es el loop que he posteado y según la consola y los printeos que envía, los objetos se crean pero en el mapa ni rastro de ellos Link to comment
Tomas Posted July 9, 2016 Share Posted July 9, 2016 Utiliza este: https://github.com/nokizorque/GTI-sourc ... pConverter Link to comment
aka Blue Posted July 9, 2016 Author Share Posted July 9, 2016 Gracias @Tomas, pero me gustaría terminar mi sistema. No entiendo exactamente el error, supuestamente se crean los objetos, según el outputDebugString pero no aparece absolutamente nada en el mapa. He intentado poner la dimension e interior a 0 por si se creaba en otras pero nada, sigue igual ¿Alguna solucion? :c Link to comment
DBY Posted July 10, 2016 Share Posted July 10, 2016 Para llegar a hacer eso te has fijado en el sistema de carga de mapas de paradise, ¿por qué no lo usas si viene en tu GM? De la forma que lo estás haciendo, cada vez que quieras meter un mapa vas a tener que reiniciar el recurso, así que se borrarán todos los objetos creados y buguearás a todos los jugadores. Link to comment
aka Blue Posted July 10, 2016 Author Share Posted July 10, 2016 Lo he pasado todo al sistema de carga de mapas de Paradise, gracias @Dannys, quería crear un sistema mío pero ya fixeado el de maps pues los metí ahí. Ahora mi duda es... la distancia de dibujado de los objetos, es decir el LOD, ¿Cuál es el más recomendable? Para que cargue rápido y tal. Gracias Link to comment
Simple0x47 Posted July 10, 2016 Share Posted July 10, 2016 Gracias @Tomas, pero me gustaría terminar mi sistema. No entiendo exactamente el error, supuestamente se crean los objetos, según el outputDebugString pero no aparece absolutamente nada en el mapa. He intentado poner la dimension e interior a 0 por si se creaba en otras pero nada, sigue igual¿Alguna solucion? :c ¿Has comprobado el return del createObject? Link to comment
aka Blue Posted July 10, 2016 Author Share Posted July 10, 2016 Mmmm si te soy sincero, no. Sólo puse un output para ver mediante la condicional si se crea o no el objeto Link to comment
Simple0x47 Posted July 11, 2016 Share Posted July 11, 2016 Lo he pasado todo al sistema de carga de mapas de Paradise, gracias @Dannys, quería crear un sistema mío pero ya fixeado el de maps pues los metí ahí. Ahora mi duda es... la distancia de dibujado de los objetos, es decir el LOD, ¿Cuál es el más recomendable? Para que cargue rápido y tal.Gracias Depende de que objeto es, lo recomendable para edificios son 300 como máximo. Para los cuerpos de los edificios con texturas no muy detalladas 1000 - 3000. Objetos de decoración (Farolas, Plantas) 50 - 150. Link to comment
aka Blue Posted July 11, 2016 Author Share Posted July 11, 2016 Lo he pasado todo al sistema de carga de mapas de Paradise, gracias @Dannys, quería crear un sistema mío pero ya fixeado el de maps pues los metí ahí. Ahora mi duda es... la distancia de dibujado de los objetos, es decir el LOD, ¿Cuál es el más recomendable? Para que cargue rápido y tal.Gracias Depende de que objeto es, lo recomendable para edificios son 300 como máximo. Para los cuerpos de los edificios con texturas no muy detalladas 1000 - 3000. Objetos de decoración (Farolas, Plantas) 50 - 150. Sigo teniendo ciertos problemas de lag, no lo entiendo. Y todo se debe a la carga de mapas, no tengo ni idea de lo que está pasando. Link to comment
Bolivar1 Posted July 12, 2016 Share Posted July 12, 2016 https://forum.multitheftauto.com/viewtopic.php?f=145&t=101104 Por favor. ¿Me pueden explicar un poco? soy nuevo en esto. Link to comment
Simple0x47 Posted July 12, 2016 Share Posted July 12, 2016 ¿Qué método empleas para crear los objetos? Link to comment
aka Blue Posted July 12, 2016 Author Share Posted July 12, 2016 Uso pues lo que dijo @Dannys, el sistema de mapas que trae el Paradise. Lo usaba hasta ahora para los interiores, por el /setmapdimension que añade el sistema. Link to comment
Simple0x47 Posted July 12, 2016 Share Posted July 12, 2016 Ese sistema está muy mal. Como mencione anteriormente la mejor manera de hacerlo es con una tabla de los objetos, un loop y un createObject. Todo ello en la parte servidor. Link to comment
Recommended Posts