Saltar al contenido
  • Global

    Global

    Chatroom Rules

    • NO SE DA SOPORTE EN CHATBOX
    • NO SPAM
    • NO FLOOD

Publicaciones recomendadas

  • Ex-Staff
Publicado (editado)

Buenas, hoy vengo con la intención de que quienes deseen compartir funciones que les han sido de utilidad, ya sea creadas por ustedes mismos o por otras personas... A más de a alguna persona le servirá el código que ustedes posteen.

 

Bueno yo comienzo

 

Nombre: createObjectAttachedTo

Descripción: Crea un objeto pegado a cualquier elemento que ustedes deseen, ya sea vehiculo, jugadores, otro objeto etc

Tipo: Cliente - Servidor

Parámetros: id del objeto,elemento al cual apegarse

Parámetros opcionales: offsetX, offsetY, offsetZ, offRotX, offRotY, offRotZ

 

Nombre: msToHour - by Gothem

Descripción: Devuelve milisegundos en formato de minutos:segundos

Tipo: Cliente - Servidor

Parámetros: milisegundos

 

Nombre: table.random

Descripción: Devuelve una llave al azar de la tabla dada

Tipo: Cliente - Servidor

Parámetros: tabla

Parámetros opcionales: número de inicio del sorteo

 

Nombre: getAlivePlayersInTeam

Descripción: Devuelve una tabla con los jugadores vivos dentro del equipo especificado

Tipo: Cliente - Servidor

Parámetros: equipo element team

 

Nombre: getPlayersByData

Descripción: Devuelve una tabla con los jugadores que se encuentren con las coincidencias de dato y valor

Tipo: Cliente - Servidor

Parámetros: Dato, valor

 

Más información sobre elementos aquí

 

 

 

function createObjectAttachedTo(id,element,offX,offY,offZ,offRX,offRY,offRZ)
	if not element or not isElement(element) then return end

	local x,y,z = getElementPosition(element)
	local objeto = createObject(id,x,y,z)

	attachElements(objeto,element,offX or 0,offY or 0,offZ or 0,offRX or 0,offRY or 0,offRZor 0)
	
	return objeto
end
 
function msToHour(milisegundos)
	local hora = math.floor(milisegundos/(36*10^5))
	local minutos = math.floor(milisegundos/60000-60*hora)
	if minutos < 9 then
		minutos = "0"..tostring(minutos)
	end
	return tostring(hora)..":"..tostring(minutos)
end

function table.random(tabla,k)
	math.random(k or 1,#tabla)
end

function getAlivePlayersInTeam(equipo)
	if not isElement(equipo) or not getElementType(equipo) == 'team' then return end
	local jugadores={}
	for k,v in pairs(getPlayersInTeam(equipo)) do
		if not isPedDead(v) then
			jugadores[k]=v
		end
	end	
	return jugadores
end

function getPlayersByData(dato,valor)
local jugadores={}
	for k,v in ipairs(getElementsByType('player')) do
		if getElementData(v,dato) == valor then
			table.insert(jugadores,v)
		end
	end
	return jugadores
end 

 

 

Editado por SAXI
  • Usuario
Publicado


Nombre: Obntener armas - by gothem
Descripción: Obtiene todas las armas que un usuario tenga
Tipo: Cliente - Servidor
Parámetros: jugador


function obtenerArmas(jugador)

local armas = ""
for i = 1,11 do
local Arma = getPlayerWeapon(jugador, i)
armas = armas .. getWeaponNameFromID(Arma) .."\n"
end
return armas

end



  • Ex-Staff
Publicado (editado)

Nombre: isCursorInRectangle

Descripción: Verifica si el cursor está dentro de una área de la pantalla específico.

Tipo: Cliente
Parámetros: x,y,ancho,alto

Devoluciones: true en caso de que el cursor se encuentre en el área, de caso contrario devuelve false

 

 

 

function isCursorInRectangle(x,y,w,h)
local sx,sy=guiGetScreenSize()
        -- verificamos si se está mostrando nuestro cursor
	if isCursorShowing() then
		-- calculamos la posición de nuestro cursor
		local mPos = {getCursorPosition()}
		cursor = {mPos[1]*sx,mPos[2]*sy}		
		-- verificamos si estamos dentro del área
		if cursor[1] > x and cursor[1] < x + w and cursor[2] > y and cursor[2] < y + h then
			return true
		else
			return false			
		end
	end	
end

 

 

 

Nombre: obtenerFecha
Descripción: obtienes un texto (string) con formato de hora, día mes y año

Ejemplo: Martes 5 de Abril 2016

Tipo Cliente - Servidor

Recomendaciones: Utilizarla en cliente junto con el evento onClientRender o onClientPreRender

 

 

function obtenerFecha()
	local tiempo={}
		
		
	local dias={
	"Lunes",
	"Martes",
	"Miercoles",
	"Jueves",
	"Viernes",
	"Sabado",
	"Domingo"
	}
	local meses={
	"Enero",
	"Febrero",
	"Marzo",
	"Abril",
	"Mayo",
	"Junio",
	"Julio",
	"Agosto",
	"Septiembre",
	"Octubre",
	"Noviembre",
	"Diciembre"
	}


	local t = getRealTime()
	if t then
		tiempo={
		horas 		= t.hour,		 -- 0-23
		minutos 	= t.minute,		 -- 0-59
		segundos 	= t.second,		 -- 0-61
		dia 		= t.monthday,	 -- 1-31
		num 		= t.weekday,	 -- 0-6
		mes 		= t.month,		 -- 0-11
		year 		= tonumber(t.year)+1900
		}

		return tiempo.horas..":"..tiempo.minutos..":"..tiempo.segundos.." | "..dias[(tiempo.num)].." "..tiempo.dia.." de "..meses[(tiempo.mes)+1].." "..tiempo.year        
	end	
end		
 

 

 

Editado por SAXI
  • 4 years later...
  • Ex-Staff
Publicado

Nombre: pairsSort

Descripción:  función iteradora que primero ordena los datos de una tabla antes de ejecutar el bucle de un loop.

Devoluciones: índice del valor, valor.

Parámetros: tabla, función para ejecución de ordenado o simplemente los strings ">" para ordenar de mayor a menor o "<" para ordenar de menor a mayor.

function pairsSort(tab,sortFunc)    
    local mastertable = {
        keys = {},
        values = {}
    }
    for k,v in pairs(tab) do        
        table.insert(mastertable.keys,k)
        table.insert(mastertable.values,v)
    end
    if type(sortFunc) == 'function' then
        table.sort(mastertable.values,sortFunc)
    elseif type(sortFunc) == 'string' then
        if sortFunc == '>' then
            table.sort(mastertable.values,function(var1,var2)
                return (type(var1) == 'number' and var1 or 0) > (type(var2) == 'number' and var2 or 0)
            end)
        elseif sortFunc == '<' then
            table.sort(mastertable.values,function(var1,var2)
                return (type(var1) == 'number' and var1 or 0) < (type(var2) == 'number' and var2 or 0)
            end)
        end
    end
    local reset = {}
    for k,v in pairs(mastertable.keys) do        
        reset[v] = mastertable.values[v]
    end
    local i = 0
    local iter = function()
        i = i + 1
        local key,val = mastertable.keys[i],reset[i]
        if tab[key] ~= nil then
            return key,val
        else
            return nil
        end
    end
    return iter
end

Ejemplo: 

local test = {12,35,22,18,1,3}

function sorting(var1,var2)
    return var1>var2    
end

for k,v in pairsSort(test,'>') do
    print(k,v)
end

output: 

1    35
2    22
3    18
4    12
5    3
6    1

  • Me gusta 1
  • Usuario
Publicado

Nombre: guiCenter

Descripción: Coloca una GUI en el centro de la pantalla dependiendo la resolución del jugador.

Tipo: Cliente

Parámetros: Ventana

Nombre: dgsCenter

Descripción: Coloca una interfaz del recurso DGS en el centro de la pantalla dependiendo la resolución del jugador.

Parámetros: Ventana 

 

Nombre: getMaps - By SAXI

Descripción: Obtiene todos los recursos tipo MAPA

Tipo: Servidor

Parámetros: no tiene

Nombre: getGamemodes - BY SAXI

Descripción: Obtiene todos los recursos tipo Gamemodes

Tipo: Servidor

Parámetros: no tiene

Nombre: getOnlyResources - BY SAXI

Descripción: Obtiene todos los recursos exceptuando los tipo Map y los gamemodes

Tipo: Servidor

Parámetros: No tiene

Nombre: getAllResourceInfo - BY SAXI

Descripción: Obtiene toda la información de un recurso

Tipo: Servidor

Parámetros: Recurso

 

 

Spoiler
function dgsCenter(ventanaCentrada)
    local DGS = exports.dgs
    local screenW, screenH = guiGetScreenSize()
    local windowW, windowH = DGS:dgsGetSize(ventanaCentrada, false)
    local x, y = (screenW - windowW) /2, (screenH - windowH) /2
    DGS:dgsSetPosition(ventanaCentrada, x, y, false)
end
Spoiler
function guiCenter(ventanaCentrada)
    local screenW, screenH = guiGetScreenSize()
    local windowW, windowH = guiGetSize(ventanaCentrada, false)
    local x, y = (screenW - windowW) /2,(screenH - windowH) /2
    guiSetPosition(ventanaCentrada, x, y, false)
end
Spoiler
currentgamemode = nil
currentmap = nil
 
function getMaps()
    local maps = {}
    for _,res in pairs(getResources()) do
        if res:getInfo('type'== 'map' then
            local info = getAllResourceInfo(res)
            table.insert(maps,info)
        end
    end
    return maps
end
 
function getGamemodes()
    local gms = {}
    for _,res in pairs(getResources()) do
        if res:getInfo('type'== 'gamemode' then
            local info = getAllResourceInfo(res)
            table.insert(gms,info)
        end
    end
    return gms
end
 
function getOnlyResources()
    local resources = {}
    for _,res in pairs(getResources()) do
        if res:getInfo('type'~= 'gamemode' and res:getInfo('type'~= 'map' then
            local info = getAllResourceInfo(res)
            table.insert(resources,info)
        end
    end
    return resources
end
 
function getAllResourceInfo(res)
    local info = {
        name = res:getInfo('name'or res.name,
        author = res:getInfo('author'or 'Desconocido',
        version = res:getInfo('version'or 'Desconocido',
        type = res:getInfo('type'),
        state = res.state,
        realName = res.name,
        failureReason = getResourceLoadFailureReason(res),
        loadTime = getResourceLoadTime(res),
        exportedFunctions = getResourceExportedFunctions(res)
    }
    return info
end
 
addEventHandler('onGamemodeMapStart',root,function(res)
    currentmap = res
end)
 
addEventHandler('onGamemodeMapStop',root,function(res)
    if res == currentmap then
        currentmap = nil
    end
end)
 
addEventHandler('onGamemodeStop',root,function(res)
    if res == currentgamemode then
        currentgamemode = nil
    end
end)
 
addEventHandler('onGamemodeStart',root,function(res)
    currentgamemode = res
end)
 
function inicioSistema()
    for _,res in pairs(getResources()) do
        if res.state == 'running' then
            if res:getInfo('type'== 'gamemode' then
                currentgamemode = res
            end
            if res:getInfo('type'== 'map' then
                local gms = res:getInfo('gamemodes')
                if gms then
                    if getResourceFromName(gms:find(currentgamemode.name)) then
                        currentmap = res
                    end
                end
            end
        end
    end
end
addEventHandler('onResourceStart',resourceRoot,inicioSistema)

NOTA: para las funciones de saxi es requerido activar el OOP.

  • Me encorazona 1
  • Ex-Staff
Publicado

Nombre: Split

Descripción: Función similar a Split de MTA, devuelve una tabla

Parametros: String y string separador

function string:split(byte)
    local tab = {}
    local pat = '(.-)'..byte
    local i = 0
    local s,e,cap = self:find(pat,1)
    while s do
        if s ~= 1 or cap ~= '' then
            table.insert(tab,cap)            
        end
        i = e+1
        s,e,cap = self:find(pat,i)        
    end
    if i <= #self then
        cap = self:sub(i)
        table.insert(tab,cap)
    end
    return tab
end

function Split(str,byte)
    return str:split(byte)
end

local test = 'Hello world from '.._VERSION
local tab = test:split('%s')
for index,string in pairs(tab) do
    print(index..': ',string)
end

output: 

1:     Hello
2:     world
3:     from
4:     Lua
5:     5.3

  • Me encorazona 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Invitado
Responder a este tema...

×   Pegar como texto enriquecido.   Pegar como texto sin formato

  Only 75 emoji are allowed.

×   Tu enlace se ha incrustado automáticamente..   Mostrar como un enlace en su lugar

×   Se ha restaurado el contenido anterior.   Limpiar editor

×   No se pueden pegar imágenes directamente. Carga o inserta imágenes desde la URL.

  • Explorando recientemente   0 miembros

    • No hay usuarios registrados viendo esta página.
×
×
  • Crear nuevo...