aka Blue Posted July 7, 2016 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.
Tomas Posted July 8, 2016 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).
-Rex- Posted July 8, 2016 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
Simple0x47 Posted July 8, 2016 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.
aka Blue Posted July 8, 2016 Author 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?
aka Blue Posted July 8, 2016 Author 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 )
PezFenix2016 Posted July 8, 2016 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
aka Blue Posted July 8, 2016 Author 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
aka Blue Posted July 9, 2016 Author 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
aka Blue Posted July 9, 2016 Author 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
Tomas Posted July 9, 2016 Posted July 9, 2016 Utiliza este: https://github.com/nokizorque/GTI-sourc ... pConverter
aka Blue Posted July 9, 2016 Author 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
DBY Posted July 10, 2016 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.
aka Blue Posted July 10, 2016 Author 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
Simple0x47 Posted July 10, 2016 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?
aka Blue Posted July 10, 2016 Author 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
Simple0x47 Posted July 11, 2016 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.
aka Blue Posted July 11, 2016 Author 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.
Bolivar1 Posted July 12, 2016 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.
aka Blue Posted July 12, 2016 Author 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.
Simple0x47 Posted July 12, 2016 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.
Recommended Posts