aka Blue Posted June 20, 2016 Share Posted June 20, 2016 Bueno, hace tiempo entre @.:CiBeR.: y @venadHD estuvimos en un sitio web (que ahora no me acuerdo), editando un código del cual tenia varias dudas, y entonces me enseñaron un pequeño truco para hacer mis funciones más compactas, utilizando tablas. Hoy os traigo un pequeño ejemplo de elementData, pero se puede utilizar prácticamente con todo: Es algo simple, pero viene bien para códigos largos y complejos: data = { g = getElementData, s = setElementData, } addCommandHandler ( "setearnivel", function ( player, commandName, cantidad ) local cantidad = tonumber ( cantidad ) local nivel = data.g ( player, "nivel" ) or 0 if cantidad then data.s ( player, "nivel", nivel + cantidad ) outputChatBox ( "¡Te has asignado "..cantidad.." de nivel!", player, 0, 255, 0 ) outputChatBox ( "¡Nivel total: "..nivel.."!", player, 0, 255, 0 ) else outputChatBox ( "• Necesitas asignar una cantidad", player, 255, 255, 255 ) end end ) Link to comment
Discord Moderators AlexTMjugador Posted June 20, 2016 Discord Moderators Share Posted June 20, 2016 Veo más simple y fácil utilizar el OOP (Object Oriented Programming, Programación Orientada a Objetos) que MTA: SA ofrece desde hace ya varias versiones. Con solo añadir esto al meta.xml del recurso en el que lo que quieres usar OOP: <oop>true</oop> Te evitas definir tablas, y trabajar con datos de un elemento es tan fácil como: elemento:setData(nombre, dato) dato = elemento:getData(nombre) Además, hay planes de implementar la siguiente sintaxis, que es todavía más intuitiva: elemento.data[nombre] = dato dato = elemento.data[nombre] Link to comment
aka Blue Posted June 20, 2016 Author Share Posted June 20, 2016 Yo no digo que se tenga que usar si o si, sólo quise compartir el truco Link to comment
-Rex- Posted June 20, 2016 Share Posted June 20, 2016 Yo uso de vez en cuando OOP, es mejor y se escribe menos código. Link to comment
UserToDelete Posted June 27, 2016 Share Posted June 27, 2016 Bueno, hace tiempo entre @.:CiBeR.: y @venadHD estuvimos en un sitio web (que ahora no me acuerdo), editando un código del cual tenia varias dudas, y entonces me enseñaron un pequeño truco para hacer mis funciones más compactas, utilizando tablas. Hoy os traigo un pequeño ejemplo de elementData, pero se puede utilizar prácticamente con todo:Es algo simple, pero viene bien para códigos largos y complejos: data = { g = getElementData, s = setElementData, } addCommandHandler ( "setearnivel", function ( player, commandName, cantidad ) local cantidad = tonumber ( cantidad ) local nivel = data.g ( player, "nivel" ) or 0 if cantidad then data.s ( player, "nivel", nivel + cantidad ) outputChatBox ( "¡Te has asignado "..cantidad.." de nivel!", player, 0, 255, 0 ) outputChatBox ( "¡Nivel total: "..nivel.."!", player, 0, 255, 0 ) else outputChatBox ( "• Necesitas asignar una cantidad", player, 255, 255, 255 ) end end ) esa coma al final de la tabla loco, que sino da erró! Link to comment
Tomas Posted June 27, 2016 Share Posted June 27, 2016 Bueno, hace tiempo entre @.:CiBeR.: y @venadHD estuvimos en un sitio web (que ahora no me acuerdo), editando un código del cual tenia varias dudas, y entonces me enseñaron un pequeño truco para hacer mis funciones más compactas, utilizando tablas. Hoy os traigo un pequeño ejemplo de elementData, pero se puede utilizar prácticamente con todo:Es algo simple, pero viene bien para códigos largos y complejos: data = { g = getElementData, s = setElementData, } addCommandHandler ( "setearnivel", function ( player, commandName, cantidad ) local cantidad = tonumber ( cantidad ) local nivel = data.g ( player, "nivel" ) or 0 if cantidad then data.s ( player, "nivel", nivel + cantidad ) outputChatBox ( "¡Te has asignado "..cantidad.." de nivel!", player, 0, 255, 0 ) outputChatBox ( "¡Nivel total: "..nivel.."!", player, 0, 255, 0 ) else outputChatBox ( "• Necesitas asignar una cantidad", player, 255, 255, 255 ) end end ) esa coma al final de la tabla loco, que sino da erró! No, no da. Link to comment
MTA Team 0xCiBeR Posted June 28, 2016 MTA Team Share Posted June 28, 2016 Veo más simple y fácil utilizar el OOP (Object Oriented Programming, Programación Orientada a Objetos) que MTA: SA ofrece desde hace ya varias versiones.Con solo añadir esto al meta.xml del recurso en el que lo que quieres usar OOP: <oop>true</oop> Te evitas definir tablas, y trabajar con datos de un elemento es tan fácil como: elemento:setData(nombre, dato) dato = elemento:getData(nombre) Además, hay planes de implementar la siguiente sintaxis, que es todavía más intuitiva: elemento.data[nombre] = dato dato = elemento.data[nombre] Nunca nada será mas facil que usar algo que vos mismo creaste. Por ejemplo crear una tabla que se llame funciones y asignarle valores como sD( set data ), sAD( set account data ) y demas. Obviamente utilizar lo que ya viene por defecto puede probar ser mas eficiente, pero en general nunca es mas comodo que algo creado por nosotros mismos. funciones = { gD = getElementData, sD = setElementData, sAD = setAccountData } -- Luego es tan solo funciones.gD() funciones.sD() funciones.sAD() Yo incluso utilizo nombres que me recuerdan a cosas de la vida cotidiana, asi las memorizo mas facilmente Link to comment
Discord Moderators AlexTMjugador Posted June 29, 2016 Discord Moderators Share Posted June 29, 2016 Depende de los gustos. Alguien puede estar de acuerdo en que llamar a unas funciones con un nombre diferente puede ser más fácil e intutivo que referirse a ellas por su propio nombre, bien sea porque es un ingenio propio, bien porque puede llegar a entorpecer el robo de scripts o bien por cualquier otro argumento. Sin embargo, también es posible encontrarse con alguien que piense que darle un nombre no estándar a una función es una pérdida de tiempo, por tener que mirar una tabla para entender el código; que piense que ni siquiera aporta una sintaxis más clara, por seguir siendo no orientado a objetos; y que piense que dar nombres abreviados solo tienen sentido en un contexto reducido y son equívocos (por ejemplo, "sAD" en un script de aviones podría referirse a una función del script llamada setAirplaneData, no a setAccountData). Personalmente, como creo que di a entender ya, prefiero llamar a las funciones de una manera normal porque todos los que hacen scripts la conocen, y eso hace que el código sea más fácil de mantener si el concepto de sentido común del autor cambia o varias personas trabajan en él. Aunque también tiene sentido que uno mismo quiera trabajar cómodo, ahorrando caracteres que teclear o copiar, y tampoco soy nadie para impedírselo. Al fin y al cabo, en la tecnología importa más la solución que los pasos intermedios Link to comment
aka Blue Posted June 29, 2016 Author Share Posted June 29, 2016 La verdad es que a mi este pequeño truco me ha ayudado mucho en códigos largos y complejos que he realizado y viene bastante bien. El problema del oop es que cambian ligeramente las funciones, como: Method: element:getData(...) Lo cual a mi pues puede llegar a liarme si el código es largo. En cambio al usar una pequeña tabla con sus funciones pues no me lío, sé lo que he puesto y a que se refiere. Pero bueno, cada uno es libre de scriptear a su manera, es simplemente un pequeño "truco" que me mostraron y quise compartir Link to comment
Recommended Posts