aka Blue Posted June 20, 2016 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 )
Moderators AlexTMjugador Posted June 20, 2016 Moderators 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] My Wiki contributions My MTA: SA Community profile Sapere aude!
aka Blue Posted June 20, 2016 Author Posted June 20, 2016 Yo no digo que se tenga que usar si o si, sólo quise compartir el truco
-Rex- Posted June 20, 2016 Posted June 20, 2016 Yo uso de vez en cuando OOP, es mejor y se escribe menos código. Leal es quien te ama y respeta tus sentimientos Paid Scripter, Contact me: https://www.facebook.com/rexscripting/ Estoy retirado.
UserToDelete Posted June 27, 2016 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ó!
Tomas Posted June 27, 2016 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. Currently developing for International Gaming Community - Join us!
MTA Team 0xCiBeR Posted June 28, 2016 MTA Team 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 DevOps Engineer, Cloud Advocate & Security Engineer(Red Team) | Coffee, Containers & Burp
Moderators AlexTMjugador Posted June 29, 2016 Moderators 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 My Wiki contributions My MTA: SA Community profile Sapere aude!
aka Blue Posted June 29, 2016 Author 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
Recommended Posts