Jump to content

Enargy,

Members
  • Posts

    1,102
  • Joined

Posts posted by Enargy,

  1. addEventHandler ( "onClientVehicleDamage", root, 
        function (attacker, weapon, _, _, _, _, _) 
            if attacker and weapon then 
                triggerServerEvent ( "onDañarVehiculo", root, source, attacker, weapon ) 
            end 
        end 
    ) 
    

    Y si no hay un atacante :?:

  2. No es necesario usar el recurso voice, esto debería funcionar:

    Plus: en este ejemplo sólo llega al jugador el audio que debe escuchar, para evitar tráfico y subidas de latencia.

      
    JugadoresCercanos = {}; 
    Cerca = 50; 
      
    setTimer( 
        function () 
            for i, player in ipairs( getElementsByType("player") ) do 
                for i, players in ipairs( getElementsByType("player") ) do 
                    if ( player ~= players and estaCercaDe(a, b) ) then  
                        if ( not JugadoresCercanos[player] ) then 
                            JugadoresCercanos[player] = {}; 
                        end 
                        table.insert(JugadoresCercanos[player], players); 
                    end 
                end 
               setPlayerVoiceBroadcastTo(player, JugadoresCercanos[player]); 
            end 
        end, 1500, 0 
    ) 
      
      
    function estaCercaDe(a, b) 
        return Vector3.getLength(Vector3.create(getElementPosition(a)), Vector3.create(getElementPosition(b))) <= Cerca; 
    end 
      
    

    No es mas eficiente de este modo xD?

            for i, player in ipairs( getElementsByType("player") ) do 
                local otherplayer = getElementsByType("player")[i]; 
                if ( player ~= otherplayer and estaCercaDe(a, b) ) then 
                    if ( not JugadoresCercanos[player] ) then 
                        JugadoresCercanos[player] = {}; 
                    end 
                    table.insert(JugadoresCercanos[player], players); 
                end 
            end 
    

  3. Este tutorial te introducira al conocimiento en LUA aplicado en MTA, Espero que te sea util y comprensible a la hora de crear tus propios scripts.

    Comenzamos.

    1.- ¿Que es un Elemento?

    Un elemento es la representacion genérica de una o mas entidades dentro del juego y estan clasificados como:

      
            · player       · colshape 
            · ped          · blip 
            · vehicle      · radararea 
            · object       · marker 
            · pickup       · team      
         
    

    + Lista de todos los elementos +

    Los elementos pueden ser creados por alguna identidad siempre y cuando no sea nombrada con el nombre de algun otro elemento.

    Ejemplo:

      
            createElement("un_nuevo_elemento") 
         
    

    2.- ¿Que es una String?

    Es una cadena de caracteres donde se presentan textos alfabetos. todo texto encerrado con los signos " al comienzo y final de un texto, frase o palabra es considerada una cadena(string).

    Ejemplo:

      
        "Habia una véz una señora que era amigable y algún dia ella se fué." 
        "1 + 1 = 2" 
        "Hola" 
         
    

    2.1- ¿Que es un Integer?

    Es un tipo de dato que donde se presenta un numero entero.

    Ejemplo:

      
            1, 2, 3, 4, 5, ... 
         
    

    2.2- ¿Que es un Float?

    Al igual que un Integer, es la presencia de un valor numerico pero en lugar de numeros enteros, presenta numeros decimales.

    Ejemplo:

      
            1.1, 1.2, 1.3, 1.4, ... 
         
    

    3.- ¿Que es una función?

    Una función es una composición resumida de uno o mas datos.

    Ejemplo:

      
            -- Su sintaxis está estructurada de esta manera:  
             
            function nueva_funcion ()  
                 
            end -- El 'end' será muy importante ya que este les indicará el final o la terminación de la función. 
         
    

    Hemos creado una función pero esta no tiene nada dentro, así que podemos implementarle algunos datos.

    Ejemplo:

      
            function mensajes () 
                outputChatBox("Primer mensaje.", 255, 255, 255, false) 
                outputChatBox("Segundo mensaje.", 255, 255, 255, false) 
                outputChatBox("Tercer mensaje.", 255, 255, 255, false) 
                outputChatBox("Cuarto mensaje.", 255, 255, 255, false) 
                outputChatBox("Quinto mensaje.", 255, 255, 255, false) 
            end 
         
    

    Ahora en la función 'mensajes' hay 5 datos que nos permitirá publicar 5 textos en el chat.

    Ejercicio: Crear 5 funciones donde nos muestre cada una 5 mensajes en rojo.

    El ejercicio es simple, primero lo primero declaramos una nueva función que nos muestre los dos mensajes en rojo.

      
                function mensajesRojos () 
                    outputChatBox("Primero.", 255, 0, 0, false) 
                    outputChatBox("Segundo.", 255, 0, 0, false) 
                end 
             
    

    Ya creamos nuestra "función base" y ahora procederemos a crear las 5 funciones con los datos que piden.

    EXISTEN DOS MANERAS DE HACERLO: La eficiente y la no adecuada (QUE NO VA HACER FALTA LA CREACIÓN DE UNA FUNCIÓN BASE).

    LA NO ADECUADA:

             
                function primerMensaje ()  
                    outputChatBox("Primero.", 255, 0, 0, false) 
                    outputChatBox("Segundo.", 255, 0, 0, false) 
                    outputChatBox("Tercero.", 255, 0, 0, false) 
                    outputChatBox("Cuarto.", 255, 0, 0, false) 
                    outputChatBox("Quinto.", 255, 0, 0, false) 
                end 
                 
                function segundoMensaje ()  
                    outputChatBox("Primero.", 255, 0, 0, false) 
                    outputChatBox("Segundo.", 255, 0, 0, false) 
                    outputChatBox("Tercero.", 255, 0, 0, false) 
                    outputChatBox("Cuarto.", 255, 0, 0, false) 
                    outputChatBox("Quinto.", 255, 0, 0, false) 
                end 
                 
                function TercerMensaje ()  
                    outputChatBox("Primero.", 255, 0, 0, false) 
                    outputChatBox("Segundo.", 255, 0, 0, false) 
                    outputChatBox("Tercero.", 255, 0, 0, false) 
                    outputChatBox("Cuarto.", 255, 0, 0, false) 
                    outputChatBox("Quinto.", 255, 0, 0, false) 
                end 
                 
                function cuartoMensaje ()  
                    outputChatBox("Primero.", 255, 0, 0, false) 
                    outputChatBox("Segundo.", 255, 0, 0, false) 
                    outputChatBox("Tercero.", 255, 0, 0, false) 
                    outputChatBox("Cuarto.", 255, 0, 0, false) 
                    outputChatBox("Quinto.", 255, 0, 0, false) 
                end 
                 
                function quintoMensaje ()  
                    outputChatBox("Primero.", 255, 0, 0, false) 
                    outputChatBox("Segundo.", 255, 0, 0, false) 
                    outputChatBox("Tercero.", 255, 0, 0, false) 
                    outputChatBox("Cuarto.", 255, 0, 0, false) 
                    outputChatBox("Quinto.", 255, 0, 0, false) 
                end 
                 
                -- LUEGO PROCEDEREMOS A EJECUTAR LA FUNCIONES (PRIMERO SE CREA LA FUNCIÓN ANTES DE HACER EL LLAMADO.) 
                primerMensaje ()  
                segundoMensaje ()  
                TercerMensaje ()  
                cuartoMensaje ()  
                quintoMensaje ()  
                 
    

    LA MANERA EFICIENTE:

      
                function mensajesRojos () -- La función base. 
                    outputChatBox("Primero.", 255, 0, 0, false) 
                    outputChatBox("Segundo.", 255, 0, 0, false) 
                    outputChatBox("Tercero.", 255, 0, 0, false) 
                    outputChatBox("Cuarto.", 255, 0, 0, false) 
                    outputChatBox("Quinto.", 255, 0, 0, false) 
                end 
                 
                function primerMensaje ()  
                    mensajesRojos () 
                end 
                 
                function segundoMensaje ()  
                    mensajesRojos () 
                end 
                 
                function TercerMensaje ()  
                    mensajesRojos () 
                end 
                 
                function cuartoMensaje ()  
                    mensajesRojos () 
                end 
                 
                function quintoMensaje ()  
                    mensajesRojos () 
                end 
                 
                -- LUEGO PROCEDEREMOS A EJECUTAR LA FUNCIONES (PRIMERO SE CREA LA FUNCIÓN ANTES DE HACER EL LLAMADO.) 
                primerMensaje ()  
                segundoMensaje ()  
                TercerMensaje ()  
                cuartoMensaje ()  
                quintoMensaje ()  
                 
    

    Hemos creado 5 funciones que muestran 5 mensajes cada una; un total de 25 mensajes en el chat.

    NOTA: Una buena recomendación sería irse por la manera eficiente ya que te ayuda a visualizar y mostrar de manera ordenada tus codigos, ademas de que te ahorran lineas de códigos.

    3.1.- ¿Que son los parametros de una función?

    Son datos asignados a una función, pueden representarse como booleanos, cadenas y números.

    Ejemplo:

      
            function miFuncion (arg1, arg2, arg3, arg4, arg5, ...) 
                 
            end 
         
    

    Los parametros de una función pueden ser muy util a la hora de crear una función desde cero pero tambien influyen mucho en la manera resumida de un código.

    Ejemplo: Creamos una función con 5 parametros: uno será una cadena(string), tres serán numeros y el ultimo un booleano.

      
            function miMensaje(texto, rojo, verde, azul, coloreado) 
                outputChatBox(texto, rojo, verde, azul, coloreado) 
            end 
             
            -- Ahora llamamos a nuestra función: 
            miMensaje("Esta es mi propia función que publica mensajes", 0, 255, 0, false) 
         
    

    Ahora ya tenemos nuestra propia función que postea un mensaje en color verde.

    3.2.- addEventHandler y addCommandHandler

    · addEventHandler: Es una función que será llamada cuando el evento al que está conectado una función se activa, asignandole argumentos especificos a una función.

    Ejemplo:

      
            -- addEventHandler esta estructurada de esta manera: addEventHandler( , ,  ) 
             
            -- Creamos una función 
            function miFuncion ( resource ) -- El parametro ´resource´ es un parametro que se lo otorga el addEventHandler. 
                outputChatBox("Se inició un resource!", 255, 255, 255, false) 
            end 
             
            -- Ejecutamos la función cada vez que algún resource se inicia. 
            addEventHandler("onClientResourceStart", getRootElement(), miFuncion) 
         
    

    · addCommandHandler: Ejecuta una función mediante una linea de comando.

    Ejemplo:

      
            -- addCommandHandler esta estructurada de esta manera: addCommandHandler( ,  ) 
             
            -- Creamos una función 
            function miFuncion (elemento_ejecutador, nombre_de_comando) -- El parametro 'elemento_ejecutador' es el elemento que ejecutó el comando. 'nombre_de_comando' es el nombre del comando que se le dio a la función. 
                outputChatBox("Hola tu!", 255, 255, 255, false) 
            end 
             
            -- Ejecutamos la función cada vez que se escribe un comando 
            addCommandHandler("hola", miFuncion) -- Al escribir '/hola' en el chat, el mensaje que esta dentro de la función se va a mostrar. 
         
    

    NOTA: Los parametros de los eventos y comandos pueden variar según la ubicación del código, ya sea Server-side o Client-side.

    Mas información sobre addEventHandler y addCommandHandler:

    4.- ¿Que es una variable?

    Es un dato de almacenamiento temporal que permite guardar datos numericos, cadenas(strings) e incluso elementos, dentro o fuera de una función.

    Ejemplo: almacenando una cadena de caracteres.

      
            variable = "Aprendiendo..." 
         
    

    4.1.- ¿Que es una variable local?

    Permite declarar un nuevo dato de almacenamiento dentro de una función.

    Ejemplo:

      
            function miFuncion () 
                local variable = "Mi texto." 
                outputChatBox(variable, 255, 255, 255, false) 
            end 
         
    

    Las variables locales no pueden ser leidas desde otra función.

    Ejemplo:

      
            function unaFuncion () 
                local variable = "Mi texto." 
            end 
             
            function otraFuncion () 
                outputChatBox(variable, 255, 255, 255, false) 
            end 
         
    

    4.2.- ¿Que es una variable global?

    Al igual que una variable local, crea una variable para almacenar datos pero a diferencia de ella; la variable puede ser leida dentro y fuera de una función. Cosa que la variable local solo hace al estar dentro de una función.

    Ejemplo:

      
            variable = "Mi texto." 
             
            function miFuncion () 
                outputChatBox(variable) 
            end 
         
    

    Una variable local puede considerarse global siempre y cuando esté fuera de una función

    Ejemplo:

      
            local variable = "Mi texto." 
             
            function miFuncion () 
                outputChatBox(variable) 
            end 
      
            function otraFuncion () 
                outputChatBox(variable) 
            end 
         
    

    5.- ¿Que son las sentencias if/else/elseif?

    A. Sentencia IF: Se utiliza para comprobar una condición y si la condición es verdadera entonces procesaremos un bloque de sentencias.

    Ejemplo:

      
            -- Creando una función que publique un mensaje. 
            function mensaje (texto) 
                if texto == "Hola" then -- Ahora si el valor del parametro 'text' es igual a 'Hola' se procesará el bloque. 
                    outputChatBox("El mensaje es el mismo.", 255, 255, 255, false) 
                end 
            end 
             
            -- Nuestro llamado 
            mensaje ( "Hola" ) 
         
    

    B. Sentencia Else: sólo es ejecutada si la expresión if es evaluada como falso (false).

    Ejemplo:

      
            -- Creando una función que publique un mensaje. 
            function mensaje (texto) 
                if texto == "Hola" then -- Ahora si el valor del parametro 'text' es igual a 'Hola' se procesará el bloque. 
                    outputChatBox("El mensaje es el mismo.", 255, 255, 255, false) 
                else -- Si la sentencia IF no se cumple, else será ejecutado. 
                    outputChatBox( "El mensaje NO es el mismo", 255, 0, 0, false ) 
                end 
            end 
             
            -- Nuestro llamado 
            mensaje ( "Bueno" ) 
         
    

    C. Sentencia Elseif: Es una combinación de if y else. Del mismo modo que else, extiende una sentencia if para ejecutar una sentencia diferente en caso que la expresión if original se evalúe como false. Sin embargo, a diferencia de else, esa expresión alternativa sólo se ejecutará si la expresión condicional del elseif se evalúa como verdadera (true).

    Ejemplo:

      
            -- Creando una función que publique un mensaje. 
            function mensaje (texto) 
                if texto == "Hola" then -- Ahora si el valor del parametro 'text' es igual a 'Hola' se procesará el bloque. 
                    outputChatBox("El mensaje es el mismo.", 255, 255, 255, false) 
                elseif texto == "Hello" then -- Si no se cumple la primera sentencia if, procederá al elseif. 
                    outputChatBox("El mensaje no es Hola sino Hello.", 255, 255, 255, false) 
                else -- Si la sentencia IF y la Elseif no se cumple, else será ejecutado. 
                    outputChatBox( "No es ni Hola ni Hello.", 255, 0, 0, false ) 
                end 
            end 
             
            -- Nuestro llamado, puede ser usando el parametro "Hola" o "Hello" 
            mensaje ( "Hola" ) 
            -- ó tambien: 
            mensaje ( "Hello" ) 
            -- O llevando la función a false al usar un texto diferente: 
            mensaje ( "Bonjour" ) 
         
    

    Tambien podemos realizar un metodo un poco complejo, usando matematica basica y booleanos

    Ejemplo:

      
            -- Creamos una función que haga la aritmetica. 
            function multiplicar ( a, b ) 
                 
                local n = a * b -- Usamos el simbolo '*' para multiplicar los dos numeros 
                 
                return n -- 'return' sirve para salir de la función con la información obtenida. 
            end 
         
    

    Ahora que ya tenemos nuestra función que cumple la aritmetica, hacemos un metodo de comparación con las sentencias if/elseif/else.

      
            function multiplicar ( a, b ) 
                 
                local n = a * b 
                 
                return n 
            end 
             
            -- Llamamos a nuestra función: 
            local resultado = multiplicar ( 2, 2 ) -- multiplicamos 2 por 2. 
            if ( resultado ) then -- la variable 'resultado' es la información obtenida de la función 'multiplicar'. 
                if ( resultado == 4 ) then -- Si el resultado es igual a 4. 
                    outputChatBox("El resultado es igual a 4", 255, 255, 255, false) 
                elseif ( resultado > 4 ) then 
                    outputChatBox("El resultado es mayor que 4", 255, 255, 255, false) 
                else -- Si el resultado no es igual a 4 ni tampoco es mayor que 4. 
                    outputChatBox("El resultado es menor que 4", 255, 255, 255, false) 
                end 
            end 
         
    

    5.- ¿Que es una Tabla?

    Un tabla es un medio de guardar un conjunto de objetos de la misma clase. Se accede a cada elemento individual de la tabla mediante un número entero denominado índice.

    Ejemplo:

      
            variable = {} -- Guardamos la tabla en una variable. Tambien pueden ser guardadas en variables locales pero solo funcionarán si estan dentro de una función. 
         
    

    Con nuestra tabla creada procederemos a introducir algun valor, ya sean cadenas, numeros o elementos.

    Ejemplo:

      
            --Existen dos maneras de insertar valores a una tabla. 
            -- La primera es creando la tabla con un valor yá insertado: 
            variable = { "Hola" } 
             
            -- La segunda es insertar el valor luego de haber creado el tabla: 
            variable = {} -- creamos nuestra tabla vacia. 
             
            -- y debajo de la tabla procederemos a usar una función llamada 'table.insert' que sirve para insertar valores a una tabla y se estructura de esta manera: table.insert (, ) 
            table.insert(variable, "Hola") -- Ahora hay un texto dentro de nuestro tabla. 
         
    

    Ahora nosotros queremos leér el mensaje que está dentro de la tabla y para eso usamos la siguiente sintaxis:

    Ejemplo:

      
            -- Creamos una variable con tres valores dentro: 
            variable = { "Hola", "Hello", "Bonjour" } 
             
            -- y para leer los textos dentro del tabla se procede: 
            variable[1] --> texto 'Hola' 
            variable[2] --> texto 'Hello' 
            variable[3] --> texto 'Bonjour' 
             
            -- Ahora si queremos que se muestren estos tres mensajes en el chat hacemos lo siguiente: 
            outputChatBox(variable[1], 255, 255, 255, false) 
            outputChatBox(variable[2], 255, 255, 255, false) 
            outputChatBox(variable[3], 255, 255, 255, false) 
         
    

    5.1.- Tabla dentro de una tabla?

    Una tabla tambien puede encontrase dentro de otra, pero a diferencia de este, hay que especificar el indice donde se encuentra. Su sintaxis es:

    Ejemplo:

      
            -- Creamos una tabla que contenga un tabla y dentro de él un texto 
            tabl = { { "Hola" } } 
             
            -- Y Ahora para leer el texto dentro de la tabla sería de esta manera: 
             
            tabl[1][1] -- tabla[el_indice][posición_del_dato] 
             
            -- Y la posteamos en nuestro chat: 
            outputChatBox(tabl[1][1], 255, 255, 255, false) 
         
    

    Podemos usar varias tablas en uno solo, solo basta con especificar el indice y la posición indicada

    Ejemplo:

      
            -- Creamos una tabla con 8 tablas dentro y que en esas tablas contenga un texto. 
            tabl = {  
                { "uno" }, 
                { "dos" }, 
                { "tres" }, 
                { "cuatro" }, 
                { "cinco" }, 
                { "seis" }, 
                { "siete" }, 
                { "ocho" } 
            } 
             
            -- Hacemos el mismo paso que el anterior ejemplo pero con un indice diferente: 
            tabl[6][1] -- Obtenemos el texto 'seis' dentro de la tabla. 
             
            -- Y lo publicamos en el chat: 
            outputChatBox(tabl[6][1], 255, 255, 255, false) 
         
    

    Tambien hay otro metodo de leer los valores dentro de una tabla y es mediante los indices textuales

    Ejemplo:

      
            tbl = { ["Alberto"] = true, ["Maria"] = true, ["Adolfo"] = true } -- En la tabla hay indices textuales que sirven para leer el valor de cada una. 
             
            -- Luego hacemos una comparación 
            check = tbl["Maria"] -- Devolverá un valor booleano que es el que se encuentra en la tabla. 
            if  (check == true ) then -- Si la variable Check es verdadera se cumple la sentencia 
                outputChatBox("Yep!", 255, 255, 255, false) 
            end 
         
    

    5.2.- ¿Que es un Array?

    Un array es una tabla que se encuentra indexada numéricamente con numeros enteros.

    Ejemplo:

      
            tabl = { [1] = "Albert", [2] = "Jenny", [3] = "Jin" } 
             
            -- Y Para leer los datos de la tabla sería: 
            outputChatBox(tabl[2]) -- Printea el valor 'Jenny'. 
         
    

    6.- ¿Que son los ciclos For-do, while-do y repeat-until?

    A. Ciclos For-do: El ciclo for se utiliza en repeticiones(bucles) cuando se conoce la cantidad de veces que se va a repetir una accion, esta compuesto por 3 partes:

    · Inicializacion: Se utiliza generalemente para iniciar un contador, de debe colocar el valor que interese eso va a depender del caso generalmente se inicializa en cero.

    · Limite: Es la condicion que se preguntara antes de hacer lo que este dentro de la repeticion, si se cumple hara las instrucciones dentro de el, si no no. Esto si es obligatorio.

    · Incremento: Es la cantidad que incrementara (o decrementara segun el caso) el contador en cada repeticion, tampoco es obligatorio osea si se omite el incremento sera de 1 en 1 (por default se incrementa a menos que se especifique lo contrario).

    Ejemplo:

      
                -- El ciclo for-do esta estructurado de esta manera: for  = , ,  
                 
                -- Creamos un ciclo for-do que cuente del 0 al 20: 
                for key = 0, 20 do 
                     
                    -- Agregamos un outputChatBox para que muestre el conteo en el chat. 
                    outputChatBox(key, 255, 255, 255, false) -- Se mostrará en el chat: 0, 1, 2, 4, 5, hasta 20. 
                     
                end -- Siempre es importante usar un 'end' despues de agregar un 'do'. 
             
    

    Ahora ya vimos la manera de como hace un conteo el ciclo for-do pero ahora lo haremos en incremento, es decir de numero en numero.

    Ejemplo:

      
                -- Creamos un ciclo que cuente de cinco en cinco hasta legar a 25. 
                for key = 0, 25, 5 do 
                 
                    --Ahora lo mostramos en el chat: 
                    outputChatBox(key, 255, 255, 255, false) -- Se mostrará así: 0, 5, 10, 15, 20, 25. 
                end 
             
    

    ¿En un ciclo for-do se puede contrar hacia atras? Si.

    Ejemplo:

      
                for i = 10, 0, -2 do -- dos en dos. 
                    outputChatBox(i, 255, 255, 255, false) -- Se mostrará así: 10, 8, 6, 4, 2, 0 
                end 
             
    

    B. Ciclos While-do: Es un ciclo en donde se cumple una condición. Es decir que todas las sentencias que encierra, se ejecutarán mientras la condición sea verdadera. Este ciclo puede o no ejecutarse, depende de los valores que sean evaluados en la condición. Por tanto la condición se evaluará antes de entrar en una nueva iteración.

    Ejemplo:

      
            i = 0 -- creamos una variable que tenga un valor de cero. 
            while ( i < 10 ) do -- i que es '0' será menor que 10. 
                outputChatBox(i) -- Mostrando el conteo en el chat 
                i = i + 1 -- comenzando el conteo hasta que el ciclo while se detenga y retorne a falso. 
            end 
         
    

    Es muy importante hacer que el ciclo cambie de false a true o true a false, de no ser así la maquina se atascará en un ciclo infinito.

    Ejemplo:

      
            n = 5 
            while ( n == 5 ) do 
                outputChatBox("Crash!", 255, 0, 0, false) 
            end 
         
    

    B. Ciclo repeat-until: Repite el código dentro del bucle hasta que la condición de finalización es cierta. La comprobación se hace al final, por lo que el código del interior siempre se va a ejecutar por lo menos una vez.

    Ejemplo:

      
            n = 0 
            repeat 
                outputChatBox(n) 
                n = n + 1 
            until n <= 8 -- El bucle termina cuando 'n' sea mayor o igual que 8. 
         
    

    Un ciclo for-do también sirve para exportar o "desempaquetar" datos de una tabla.

    Ejemplo:

      
            -- Creamos una tabla con una tabla dentro y dentro de ellas todas tendran un texto. 
            tabla = { 
                {"Anne"}, 
                {"Sebastian"}, 
                {"Jimenez"}, 
                {"Mario"}, 
                {"Alfred"} 
            } 
             
            -- el ciclo for-do para las tablas estan estructurados de esta manera: for ,  in  () do 
            for key, value in ipairs () do 
      
            end -- Se le agrega un end para cerrar el ciclo.     
      
        -- 'key' es el numero de indice que se va a contar al momento de exportar la tabla. 
        -- 'value' es el valor que estan dentro de las tablas. 
        -- 'ipairs' palabra clave para la exportación de datos. 
         
    

    Uso de ipairs y pairs

    · PAIRS: Valor en orden aleatorio o variantes.

    Ejemplo:

      
            numeros = {1, d = "2",3, c = "4", 5, 6, b = "7", 8, a = "9"} 
      
            for key, value in pairs(numeros) do 
                outputChatBox(value)  
            end 
             
            -- Se mostrara en el chat lo siguiente: 1,3,5,6,8,9,2,4,7 
           
    

    · IPAIRS: Claves numéricas en orden ascendente.

    Ejemplo:

      
            numeros = {1,2,3,4,5,6,7,8,9} 
      
            for key, value in pairs(numeros) do 
                outputChatBox(value) 
            end 
             
            -- Se mostrara en el chat lo siguiente: 1,2,3,4,5,6,7,8,9 
           
    

    Signos de igualacion, mayor que, menor que y distinción

    En lua se aplica los metodos de Matematica básica de los signos y pueden representarse así:

      
            >  -- mayor que... 
            <  -- menor que... 
            >= -- mayor o igual que... 
            <= -- menor o igual que... 
            ~= -- distinto a... 
         
    

    Ejemplo:

      
            -- mayor que... 
            if ( 5 > 0 ) then 
                return true -- verdadero. 
            end 
             
            -- menor que... 
            if ( 5 < 0 ) then 
                return false -- falso. 
            end  
      
            -- mayor o igual que... 
            if ( 5 >= 5 ) then 
                return true -- verdadero. 
            end  
             
            -- menor o igual que... 
            if ( 5 <= 5 ) then 
                return true -- verdadero. 
            end  
      
            -- distinto a.... 
            if ( 2 ~= 5 ) then 
                return true -- verdadero. 
            end          
         
    

  4. Posteo un progressBar de mi librería personal (no está terminada pero tengo algo).

    dxElements = {} 
      
    function progressbar(x, y, w, h, progress, color) 
        if (progress <= 0) then  
            progress = 0 
        elseif (progress >= 100) then  
            progress = 100 
        end 
         
        local element = createElement("GL_Progressbar") 
      
        if not dxElements[element] then 
            dxElements[element] = {x=x, y=y, w=w, h=h, progress=progress, color=color} 
        end 
      
        return element 
    end 
      
    addEventHandler("onClientRender", root,  
    function() 
        for _, v in ipairs(getElementChildren(getResourceDynamicElementRoot(getThisResource()))) do 
            if v and dxElements[v] then 
      
                local elementType = getElementType(v) 
                 
                --- BARRA DE PROGRESO; 
                if elementType == "GL_Progressbar" then 
                 
                    local curprogress 
                    local x, y, w, h, progress, color = dxElements[v].x, dxElements[v].y,  
                                                        dxElements[v].w, dxElements[v].h,  
                                                        dxElements[v].progress, dxElements[v].color 
                     
                    curprogress = w * (progress/100) 
                     
                    if (progress < 1) then 
                        curprogress = 4 
                    end 
                     
                    dxDrawRectangle(x, y, w, h, tocolor(10, 10, 10, 100), false) 
                    dxDrawRectangle(x+2, y+2, w-4, h-4, tocolor(100, 100, 100, 150), false) 
                    dxDrawRectangle(x+2, y+2, curprogress-4, h-4, color, false) 
                end 
            end 
        end 
    end) 
      
    function dxGetProgressBar(elem) 
        if getElementType(elem) ~= "GL_ProgressBar" then return nil end 
        if dxElements[elem] ~= nil then 
            return tonumber(dxElements[elem].progress) 
        end 
    end 
      
    function dxSetProgressBar(elem, numb) 
        if getElementType(elem) ~= "GL_ProgressBar" then return nil end 
        if dxElements[elem] ~= nil then 
            dxElements[elem].progress = numb 
        end 
    end 
      
    

    Sintaxis

    · progressbar(int x, int y, int width, int height, int progress, func tocolor ) 
    · dxGetProgressBar(element) 
    

  5. Eso dependería de tu desempeño en trabajar en el sitio donde va a estar basado, Liberty City puede ser uno de los lugares que hacen al servidor "diferente a los demás". Para pensar en si lo quieres basar en esa ciudad tendrías que pensar primero en como vas a implementar los objetos al GTASA, hacer algo así va a requerir una cantidad de horas(incluso días :P) descargando todos los objetos y como la comunidad Hispana es muy escasa en los roleplays será un poco complicado, Estar esperando horas para "checar como es el servidor" y si no les parece bien se van a ir, desperdiciando tiempo en algo que no es a su gusto.

    Si tienes tanto deseo en hacerlo en Liberty City o algún lugar que no tenga que ver en el mapa del SA toma en cuenta lo que te dije arriba. En cuanto mi opinión yo diría que San Fierro es un lugar donde ningún roleplay hispano o ingles se haya centrado en esa ciudad, por lo que sé hasta ahora.

  6.     local accountname = getAccountName ( getPlayerAccount ( thePlayer ) ) 
        if isObjectInACLGroup ( "user." .. accountname, aclGetGroup ( "Owner" ) ) then 
        --- Se supone que coloques lo que la función vaya hacer dentro del if/end.  
        end 
    

  7. Yo he visto en algunos metas que tienen en el atributo "shared", es decir, Compartido. Podrias intentar implementarlo y ver si hace algún efecto, nunca lo he intentado pero tengo curiosidad.

×
×
  • Create New...