yeah perdonen

mail@pastecode.io avatar
unknown
lua
3 years ago
43 kB
3
Indexable
Never
-- >>Tablas<<
exports["RPA-SQL"]:query("\
CREATE TABLE IF NOT EXISTS mta_casas(\
    id int(11) NOT NULL AUTO_INCREMENT,\
    entrada_x decimal(6,2) NOT NULL,\
    entrada_y decimal(6,2) NOT NULL,\
    entrada_z decimal(6,2) NOT NULL,\
    entrada_tx decimal(6,2) NOT NULL,\
    entrada_ty decimal(6,2) NOT NULL,\
    entrada_tz decimal(6,2) NOT NULL,\
    entrada_rot decimal(5,2) NOT NULL,\
    entrada_int int(5),\
    entrada_dim int(5),\
    salida_x decimal(6,2) NOT NULL,\
    salida_y decimal(6,2) NOT NULL,\
    salida_z decimal(6,2) NOT NULL,\
    salida_tx decimal(6,2) NOT NULL,\
    salida_ty decimal(6,2) NOT NULL,\
    salida_tz decimal(6,2) NOT NULL,\
    salida_rot decimal(5,2) NOT NULL,\
    salida_int int(5),\
    salida_dim int(5),\
    costo_venta int(11) NOT NULL DEFAULT 0,\
    en_venta int(1) NOT NULL DEFAULT 1,\
    costo_renta int(11) NOT NULL DEFAULT 0,\
    rentando int(1) NOT NULL DEFAULT 0,\
    cerrada int(1) NOT NULL DEFAULT 1,\
    dejar_muebles int(1) NOT NULL DEFAULT 0,\
    PRIMARY KEY(id)\
)")
exports["RPA-SQL"]:query("\
	CREATE TABLE IF NOT EXISTS mta_casas_llaves(\
	id_personaje int(11) NOT NULL,\
    id_casa int(11) NOT NULL,\
    tipo int(2) NOT NULL,\
    permisos varchar(255) NOT NULL,\
    FOREIGN KEY (id_personaje) REFERENCES mta_personajes(idpersonaje) ON UPDATE CASCADE ON DELETE CASCADE,\
    FOREIGN KEY (id_casa) REFERENCES mta_casas(id) ON UPDATE CASCADE ON DELETE CASCADE,\
    PRIMARY KEY(id_personaje, id_casa)\
)")
exports["RPA-SQL"]:query("\
	CREATE TABLE IF NOT EXISTS mta_muebles(\
	id int(11) NOT NULL AUTO_INCREMENT,\
	model int(5) NOT NULL,\
	costo int(11) NOT NULL DEFAULT 0,\
	tipo int(2) NOT NULL DEFAULT 0,\
    PRIMARY KEY(id)\
)")
exports["RPA-SQL"]:query("\
	CREATE TABLE IF NOT EXISTS mta_muebles_colocados(\
    id_mueble int(11) NOT NULL,\
    x decimal(6,2) NOT NULL,\
    y decimal(6,2) NOT NULL,\
    z decimal(6,2) NOT NULL,\
    rx decimal(5,2) NOT NULL,\
    ry decimal(5,2) NOT NULL,\
    rz decimal(5,2) NOT NULL,\
    interior int(5) NOT NULL,\
    dimension int(5) NOT NULL,\
    id_casa int(5) NOT NULL,\
    FOREIGN KEY (id_mueble) REFERENCES mta_muebles_personajes(id_mueble) ON UPDATE CASCADE ON DELETE CASCADE,\
    FOREIGN KEY (id_casa) REFERENCES mta_casas(id) ON UPDATE CASCADE ON DELETE CASCADE,\
    PRIMARY KEY(id_mueble)\
)")
exports["RPA-SQL"]:query("\
	CREATE TABLE IF NOT EXISTS mta_muebles_personajes(\
	id_personaje int(11) NOT NULL,\
    id_mueble int(11) NOT NULL,\
    FOREIGN KEY (id_personaje) REFERENCES mta_personajes(idpersonaje) ON UPDATE CASCADE ON DELETE CASCADE,\
    FOREIGN KEY (id_mueble) REFERENCES mta_muebles(id) ON UPDATE CASCADE ON DELETE CASCADE,\
    PRIMARY KEY(id_personaje, id_mueble)\
)")
exports["RPA-SQL"]:query("\
	CREATE TABLE IF NOT EXISTS mta_casas_bloqueados(\
	id_personaje int(11) NOT NULL,\
    id_casa int(11) NOT NULL,\
    FOREIGN KEY (id_personaje) REFERENCES mta_personajes(idpersonaje) ON UPDATE CASCADE ON DELETE CASCADE,\
    FOREIGN KEY (id_casa) REFERENCES mta_casas(id) ON UPDATE CASCADE ON DELETE CASCADE,\
    PRIMARY KEY(id_personaje, id_casa)\
)")
exports["RPA-SQL"]:query("\
    CREATE TABLE IF NOT EXISTS mta_ultimas_conexiones(\
    id_personaje int(11) NOT NULL,\
    ultima_conexion int(11) NOT NULL,\
    FOREIGN KEY (id_personaje) REFERENCES mta_personajes(idpersonaje) ON UPDATE CASCADE ON DELETE CASCADE,\
    PRIMARY KEY(id_personaje)\
)")
exports["RPA-SQL"]:query("\
    CREATE TABLE IF NOT EXISTS mta_tienda_muebles(\
    id int(5) NOT NULL AUTO_INCREMENT,\
    model int(5) NOT NULL,\
    tipo int(2) NOT NULL DEFAULT 0,\
    costo_venta int(11) NOT NULL DEFAULT 0,\
    PRIMARY KEY(id)\
)")
-- >>Fin Tablas<<
casas_parents = {}
function cargarCasas()
	local result = exports["RPA-SQL"]:query("\
    SELECT c.*,\
    MAX(CASE WHEN l.tipo = 1 THEN p.Nombre ELSE NULL END) AS propietario,\
    MAX(CASE WHEN l.tipo = 2 THEN p.Nombre ELSE NULL END) AS rentador\
    FROM mta_casas c\
    LEFT JOIN mta_casas_llaves l\
    ON c.id = l.id_casa\
    LEFT JOIN mta_personajes p\
    ON l.id_personaje = p.idpersonaje\
    GROUP BY c.id\
    ")
    for i,v in ipairs(result) do
        local id = v.id
        if casas_parents[id] and isElement(casas_parents[id]) then
            local marker = casas_parents[id]:getData("Marker")
            if marker and isElement(marker) then
                marker:destroy()
            end
            casas_parents[id]:destroy()
            casas_parents[id] = nil
        end
        local ent_col = ColShape.Sphere(v.entrada_x, v.entrada_y, v.entrada_z, 5)
        ent_col:setData("Casa_Data", v)
        ent_col:setInterior(v.entrada_int)
        ent_col:setDimension(v.entrada_dim)
        sal_marker = Marker(v.salida_x, v.salida_y, v.salida_z-0.8, "arrow", 1, 0, 0, 255, 100)
        sal_marker:setData("Parent", ent_col)
        sal_marker:setInterior(v.salida_int)
        sal_marker:setDimension(v.salida_dim)
        ent_col:setData("Marker", sal_marker)
        casas_parents[id] = ent_col
    end
end
addEventHandler("onResourceStart", resourceRoot, cargarCasas)

function cargarCasa(id)
    local result = exports["RPA-SQL"]:query("\
    SELECT c.*,\
    MAX(CASE WHEN l.tipo = 1 THEN p.Nombre ELSE NULL END) AS propietario,\
    MAX(CASE WHEN l.tipo = 2 THEN p.Nombre ELSE NULL END) AS rentador\
    FROM mta_casas c\
    LEFT JOIN mta_casas_llaves l\
    ON c.id = l.id_casa\
    LEFT JOIN mta_personajes p\
    ON l.id_personaje = p.idpersonaje\
    WHERE c.id=?\
    GROUP BY c.id\
    LIMIT 1\
    ", id)
    if result[1] then
        local ent_col = ColShape.Sphere(result[1].entrada_x, result[1].entrada_y, result[1].entrada_z, 5)
        ent_col:setData("Casa_Data", result[1])
        ent_col:setInterior(result[1].entrada_int)
        ent_col:setDimension(result[1].entrada_dim)
        sal_marker = Marker(result[1].salida_x, result[1].salida_y, result[1].salida_z-0.5, "corona", 0.75, 0, 0, 255, 100)
        sal_marker:setData("Parent", ent_col)
        sal_marker:setInterior(result[1].salida_int)
        sal_marker:setDimension(result[1].salida_dim)
        ent_col:setData("Marker", sal_marker)
        casas_parents[id] = ent_col
    end
end

function refrescarCasa(id)
    local result = exports["RPA-SQL"]:query("\
    SELECT c.*,\
    MAX(CASE WHEN l.tipo = 1 THEN p.Nombre ELSE NULL END) AS propietario,\
    MAX(CASE WHEN l.tipo = 2 THEN p.Nombre ELSE NULL END) AS rentador\
    FROM mta_casas c\
    LEFT JOIN mta_casas_llaves l\
    ON c.id = l.id_casa\
    LEFT JOIN mta_personajes p\
    ON l.id_personaje = p.idpersonaje\
    WHERE c.id=?\
    GROUP BY c.id\
    LIMIT 1\
    ", id)
    if result[1] then
        local id = result[1].id
        if casas_parents[id] and isElement(casas_parents[id]) then
            local marker = casas_parents[id]:getData("Marker")
            if marker and isElement(marker) then
                marker:destroy()
            end
            casas_parents[id]:destroy()
            casas_parents[id] = nil
        end
        local ent_col = ColShape.Sphere(result[1].entrada_x, result[1].entrada_y, result[1].entrada_z, 5)
        ent_col:setData("Casa_Data", result[1])
        ent_col:setInterior(result[1].entrada_int)
        ent_col:setDimension(result[1].entrada_dim)
        sal_marker = Marker(result[1].salida_x, result[1].salida_y, result[1].salida_z-0.5, "corona", 0.75, 0, 0, 255, 100)
        sal_marker:setData("Parent", ent_col)
        sal_marker:setInterior(result[1].salida_int)
        sal_marker:setDimension(result[1].salida_dim)
        ent_col:setData("Marker", sal_marker)
        casas_parents[id] = ent_col
        triggerClientEvent(res..":updateCasa", root, id)
    end
end

function eliminarCasa(id, player)
    local result = exports["RPA-SQL"]:querypoll("DELETE FROM mta_casas WHERE id=?", id)
    if result then
        if result[2] == 1 then
            if player then
                outputChatBox("Eliminaste la casa #FFFF00#"..id, player, 255, 0, 0, true)
            end
        else
            if player then
                outputChatBox("La casa #FFFF00#"..result[3].." #FF0000ya esta eliminada", player, 255, 0, 0, true)
            end
        end
        if casas_parents[id] and isElement(casas_parents[id]) then
            local marker = casas_parents[id]:getData("Marker")
            if marker and isElement(marker) then
                marker:destroy()
            end
            casas_parents[id]:destroy()
            casas_parents[id] = nil
        end
    end
end

addEvent(res..":requestWarp", true)
function requestWarp(tipo, id)
    if casas_parents[id] and isElement(casas_parents[id]) then
        local data = casas_parents[id]:getData("Casa_Data")
        if data then
            if not source:getData("ViendoCasa") then
                if not source:isBloqueado(id) then
                    if data.cerrada == 0 then
                        local x, y, z, r, int, dim
                        if tipo == "entrada" then
                            x, y, z, r, int, dim = data.salida_tx, data.salida_ty, data.salida_tz, data.salida_rot, data.salida_int, data.salida_dim
                        else
                            x, y, z, r, int, dim = data.entrada_tx, data.entrada_ty, data.entrada_tz, data.entrada_rot, data.entrada_int, data.entrada_dim
                        end
                        startWarpTo(source, x, y, z, r, int, dim, _, id, tipo)
                    else
                        avisos2(source, "La casa esta cerrada.", 255, 0, 0)
                    end
                else
                    avisos2(source, "Estas bloqueado en esta propiedad.", 255, 0, 0)
                end
            else
                avisos2(source, "Actualmente estas viendo una casa, espera a que el tiempo termine.", 255, 0, 0)
            end
        end
    end
end
addEventHandler(res..":requestWarp", root, requestWarp)

addEvent(res..":toggleCerradura", true)
function toggleCerradura(id)
    if casas_parents[id] then
        if source:isHavePermiso(id, "cerradura") then
            local data = casas_parents[id]:getData("Casa_Data")
            if data then
                if data.cerrada == 0 then
                    data.cerrada = 1
                else
                    data.cerrada = 0
                end
                casas_parents[id]:setData("Casa_Data", data)
                exports["RPA-SQL"]:query("UPDATE mta_casas SET cerrada=? WHERE id=?", data.cerrada, id)
            end
        end
    end
end
addEventHandler(res..":toggleCerradura", root, toggleCerradura)

addEvent(res..":requestCompra", true)
function requestCompra(id)
    if casas_parents[id] and isElement(casas_parents[id]) then
        local data = casas_parents[id]:getData("Casa_Data")
        if data then
            if not source:isBloqueado(id) then
                if data.propietario ~= source:getNombre() then
                    if data.en_venta then
                        if isHaveCuentaBancaria(source:getNombre()) then
                            local costo = data.costo_venta
                            if source:getMoney() >= costo then
                                local old_propietario, old_pj_id = obtenerPropietario(id)
                                if cambiarPropietario(source:getNombre(), id) then
                                    source:takeMoney(costo)
                                    if old_propietario then
                                        local result = exports["RPA-SQL"]:querypoll("UPDATE mta_cuentas_bancarias SET Saldo=Saldo+? WHERE Propietario=?", costo, old_propietario)
                                        local propietario = Player(old_propietario)
                                        if propietario then
                                            if result then
                                                if result[2] == 1 then
                                                    outputChatBox("Se deposito $"..comma(costo).." a tu cuenta bancaria por vender la casa #"..id..".", propietario, 0, 255, 0)
                                                else
                                                    outputChatBox("Ocurrio un error al depositar $"..comma(costo).." a tu cuenta bancaria por vender la casa #"..id..".", propietario, 255, 0, 0)
                                                end
                                            end
                                        end
                                    end
                                    outputChatBox("Compraste la casa #FFFF00#"..id.." #00FF00por #FFFF00$"..comma(costo)..".", source, 0, 255, 0, true)
                                else
                                    avisos2(source, "Algo salio mal al comprar la casa.", 255, 0, 0)
                                end
                            else
                                avisos2(source, "No tienes suficiente dinero para comprar esta casa.", 255, 0, 0)
                            end
                        else
                            avisos2(source, "Necesitas una cuenta bancaria para poder comprar.", 255, 0, 0)
                        end
                    else
                        avisos2(source, "La casa no se encuentra en venta.", 255, 0, 0)
                    end
                else
                    avisos2(source, "Esta casa ya te pertenece.", 255, 0, 0)
                end
            else
                avisos2(source, "Estas bloqueado en esta propiedad.", 255, 0, 0)
            end
        end
    end
end
addEventHandler(res..":requestCompra", root, requestCompra)

addEvent(res..":requestRenta", true)
function requestRenta(id)
    if casas_parents[id] and isElement(casas_parents[id]) then
        local data = casas_parents[id]:getData("Casa_Data")
        if data then
            if not source:isBloqueado(id) then
                if data.propietario ~= source:getNombre() then
                    if data.rentador ~= source:getNombre() then
                        if data.rentando then
                        	if isHaveCuentaBancaria(source:getNombre()) then
	                            if #obtenerCasaRenta(source:getNombre()) == 0 then
	                                local costo = data.costo_renta
	                                if source:getMoney() >= costo then
	                                    local old_propietario, old_pj_id = obtenerPropietario(id)
	                                    if cambiarRentador(source:getNombre(), id) then
	                                        source:takeMoney(costo)
	                                        if old_propietario then
	                                        	local result = exports["RPA-SQL"]:querypoll("UPDATE mta_cuentas_bancarias SET Saldo=Saldo+? WHERE Propietario=?", costo, old_propietario)
									        	local propietario = Player(old_propietario)
								            	if propietario then
											        if result then
											            if result[2] == 1 then
											            	outputChatBox("Se deposito $"..comma(costo).." a tu cuenta bancaria por rentar la casa #"..id..".", propietario, 0, 255, 0)
											            else
											            	outputChatBox("Ocurrio un error al depositar $"..comma(costo).." a tu cuenta bancaria por rentar la casa #"..id..".", propietario, 255, 0, 0)
											            end
											        end
										        end
	                                        end
	                                        outputChatBox("Rentaste la casa #FFFF00#"..id.." #00FF00por #FFFF00$"..comma(costo)..".", source, 0, 255, 0, true)
	                                    else
	                                        avisos2(source, "Algo salio mal al rentar la casa.", 255, 0, 0)
	                                    end
	                                else
	                                    avisos2(source, "No tienes suficiente dinero para rentar esta casa.", 255, 0, 0)
	                                end
	                            else
	                                avisos2(source, "Solo puedes rentar 1 casa.", 255, 0, 0)
	                            end
							else
	                           	avisos2(source, "Necesitas una cuenta bancaria para poder rentar.", 255, 0, 0)
                            end
                        else
                            avisos2(source, "La casa no se encuentra en venta.", 255, 0, 0)
                        end
                    else
                        avisos2(source, "Ya estas rentando esta casa.", 255, 0, 0)
                    end
                else
                    avisos2(source, "Esta casa ya te pertenece.", 255, 0, 0)
                end
            else
                avisos2(source, "Estas bloqueado en esta propiedad.", 255, 0, 0)
            end
        end
    end
end
addEventHandler(res..":requestRenta", root, requestRenta)

addEvent(res..":cambiarVenta", true)
function cambiarVenta(id, costo)
    if casas_parents[id] and isElement(casas_parents[id]) then
        local data = casas_parents[id]:getData("Casa_Data")
        if data then
            if source:isHavePermiso(id, "vender") then
                if data.en_venta == 0 then
                    if tonumber(costo) then
                        costo = math.floor(costo)
                        if costo > 0 then
                            local result = exports["RPA-SQL"]:query("UPDATE mta_casas SET en_venta=1, costo_venta=? WHERE id=?", costo, id)
                            if result then
                                outputChatBox("Pusiste en venta la casa #FFFF00#"..id.." #00FF00por #FFFF00$"..comma(costo)..".", source, 0, 255, 0, true)
                                refrescarCasa(id)
                            else
                                avisos2(source, "Algo salio mal al poner en venta esta casa.", 255, 0, 0)
                            end
                        else
                            avisos2(source, "El costo de venta debe ser mayor a $0.", 255, 0, 0)
                        end
                    else
                        avisos2(source, "El costo de venta no es valido.", 255, 0, 0)
                    end
                else
                    local result = exports["RPA-SQL"]:query("UPDATE mta_casas SET en_venta=0 WHERE id=?", id)
                    if result then
                        outputChatBox("Dejaste de vender la casa #FFFF00#"..id..".", source, 0, 255, 0, true)
                        refrescarCasa(id)
                    else
                        avisos2(source, "Algo salio mal al quitar de la venta esta casa.", 255, 0, 0)
                    end
                end
            else
                avisos2(source, "No tienes permiso para poner en venta esta casa.", 255, 0, 0)
            end
        end
    end
end
addEventHandler(res..":cambiarVenta", root, cambiarVenta)

addEvent(res..":cambiarRenta", true)
function cambiarRenta(id, costo)
    if casas_parents[id] and isElement(casas_parents[id]) then
        local data = casas_parents[id]:getData("Casa_Data")
        if data then
            if source:isHavePermiso(id, "rentar") then
                if data.rentando == 0 then
                    if not data.rentador  then
                        if tonumber(costo) then
                            costo = math.floor(costo)
                            if costo > 0 then
                                local result = exports["RPA-SQL"]:query("UPDATE mta_casas SET rentando=1, costo_renta=? WHERE id=?", costo, id)
                                if result then
                                    outputChatBox("Habilitaste la renta en la casa #FFFF00#"..id.." #00FF00por #FFFF00$"..comma(costo)..".", source, 0, 255, 0, true)
                                    refrescarCasa(id)
                                else
                                    avisos2(source, "Algo salio mal al habilitar la renta esta casa.", 255, 0, 0)
                                end
                            else
                                avisos2(source, "El costo de renta debe ser mayor a $0.", 255, 0, 0)
                            end
                        else
                            avisos2(source, "El costo de renta no es valido.", 255, 0, 0)
                        end
                    else
                         avisos2(source, "No puedes rentar una casa que ya tiene un rentador.", 255, 0, 0)
                    end
                else
                    local result = exports["RPA-SQL"]:query("UPDATE mta_casas SET rentando=0 WHERE id=?", id)
                    if result then
                        outputChatBox("Deshabilitaste la renta en la casa #FFFF00#"..id..".", source, 0, 255, 0, true)
                        refrescarCasa(id)
                    else
                        avisos2(source, "Algo salio mal al deshabilitar la renta esta casa.", 255, 0, 0)
                    end
                end
            else
                avisos2(source, "No tienes permiso para poner en renta esta casa.", 255, 0, 0)
            end
        end
    end
end
addEventHandler(res..":cambiarRenta", root, cambiarRenta)

addEvent(res..":eliminarRentador", true)
function eliminarRentador(id)
    if casas_parents[id] and isElement(casas_parents[id]) then
        local data = casas_parents[id]:getData("Casa_Data")
        if data then
            if source:isHavePermiso(id, "rentar") then
                if data.rentador then
                    exports["RPA-SQL"]:query("DELETE FROM mta_casas_llaves WHERE id_casa=? AND tipo=2", id)
                    local result = exports["RPA-SQL"]:query("UPDATE mta_casas SET rentando=0 WHERE id=?", id)
                    if result then
                        outputChatBox("Eliminaste al rentador de la casa #FFFF00#"..id.." ("..data.rentador..").", source, 255, 255, 0, true)
                        refrescarCasa(id)
                    else
                        avisos2(source, "Algo salio mal al habilitar la renta esta casa.", 255, 0, 0)
                    end
                end
            else
                avisos2(source, "No tienes permiso para poner en renta esta casa.", 255, 0, 0)
            end
        end
    end
end
addEventHandler(res..":eliminarRentador", root, eliminarRentador)

--
function cambiarPropietario(nombre, id, player)
    local pj_id = getPersonajeIDFromName(nombre)
    if pj_id then
        exports["RPA-SQL"]:query("DELETE FROM mta_casas_llaves WHERE id_casa=? AND tipo=1", id)
        local result = exports["RPA-SQL"]:querypoll("INSERT INTO mta_casas_llaves (id_personaje, id_casa, tipo, permisos) VALUES (?, ?, 1, ?)", pj_id, id, getPermisosJSONFromName({"todos los permisos"}))
        if result then
            if result[2] == 1 then
                exports["RPA-SQL"]:query("UPDATE mta_casas SET en_venta=0,rentando=0 WHERE id=?", id)
                if player then
                    outputChatBox("Pusiste de propietario a "..nombre.." en la casa #FFFF00#"..id, player, 0, 255, 0, true)
                end
                refrescarCasa(id)
                return true
            else
                if player then
                    outputChatBox("No se pudo cambiar de propietario a la casa #FFFF00#"..id, player, 0, 255, 0, true)
                end
            end
        end
    end
    return false
end

function cambiarRentador(nombre, id, player)
    local pj_id = getPersonajeIDFromName(nombre)
    if pj_id then
        exports["RPA-SQL"]:query("DELETE FROM mta_casas_llaves WHERE id_casa=? AND tipo=2", id)
        local result = exports["RPA-SQL"]:querypoll("INSERT INTO mta_casas_llaves (id_personaje, id_casa, tipo, permisos) VALUES (?, ?, 2, ?)", pj_id, id, getPermisosJSONFromName({"cerradura", "editar muebles", "almacenar muebles"}))
        if result then
            if result[2] == 1 then
                exports["RPA-SQL"]:query("UPDATE mta_casas SET rentando=0 WHERE id=?", id)
                if player then
                    outputChatBox("Pusiste de rentador a "..nombre.." en la casa #FFFF00#"..id, player, 0, 255, 0, true)
                end
                refrescarCasa(id)
                return true
            else
                if player then
                    outputChatBox("No se pudo cambiar de rentador a la casa #FFFF00#"..id, player, 0, 255, 0, true)
                end
            end
        end
    end
    return false
end

addEvent(res..":requestLlaves", true)
function requestLlaves(id)
    if casas_parents[id] and isElement(casas_parents[id]) then
        local data = casas_parents[id]:getData("Casa_Data")
        if data then
        	local llaves = obtenerLlaves(id)
        	if llaves then
        		triggerClientEvent(source, res..":sendLlaves", source, llaves)
    		else
    			avisos2(source, "Ocurrio un error al cargar los jugadores con llave.", 255, 0, 0)
        	end
        end
    end
end
addEventHandler(res..":requestLlaves", root, requestLlaves)

addEvent(res..":requestBloqueados", true)
function requestBloqueados(id)
    if casas_parents[id] and isElement(casas_parents[id]) then
        local data = casas_parents[id]:getData("Casa_Data")
        if data then
        	local bloqueados = obtenerBloqueados(id)
        	if bloqueados then
        		triggerClientEvent(source, res..":sendBloqueados", source, bloqueados)
    		else
    			avisos2(source, "Ocurrio un error al cargar los jugadores bloqueados.", 255, 0, 0)
        	end
        end
    end
end
addEventHandler(res..":requestBloqueados", root, requestBloqueados)

function agregarLlave(nombre, id, player)
    local pj_id = getPersonajeIDFromName(nombre)
    if pj_id then
        local result = exports["RPA-SQL"]:querypoll("INSERT INTO mta_casas_llaves (id_personaje, id_casa, tipo, permisos) VALUES (?, ?, 3, ?)", pj_id, id, getPermisosJSONFromName({"cerradura"}))
        if result then
            if result[2] == 1 then
                if player then
                    outputChatBox("Le diste una llave a "..nombre.." en la casa #FFFF00#"..id, player, 0, 255, 0, true)
                end
                return true
            else
                if player then
                    outputChatBox("No se pudo agregar la llave de "..nombre.." en la casa #FFFF00#"..id, player, 0, 255, 0, true)
                end
                return nombre.." ya tiene una llave"
            end
        end
	else
		return nombre.." no existe"
    end
    return false
end

addEvent(res..":darLlave", true)
function darLlave(nombre, id)
    if casas_parents[id] and isElement(casas_parents[id]) then
        local data = casas_parents[id]:getData("Casa_Data")
        if data then
            if data.propietario ~= nombre then
                if data.rentador ~= nombre then
                	local result = agregarLlave(nombre, id)
                    if result == true then
                        outputChatBox("Agregaste una llave para "..nombre.." en la casa #FFFF00#"..id..".", source, 0, 255, 0, true)
                        local llaves = obtenerLlaves(id)
			        	if llaves then
			        		triggerClientEvent(source, res..":sendLlaves", source, llaves)
			        	end
                    elseif result == false then
                        avisos2(source, "Algo salio mal al agregar la llave.", 255, 0, 0)
                    else
                    	avisos2(source, result, 255, 0, 0)
                    end
                else
                    avisos2(source, "El nombre escrito es del rentador, asi que ya posee una llave.", 255, 0, 0)
                end
            else
                avisos2(source, "El nombre escrito es del propietario, asi que ya posee una llave.", 255, 0, 0)
            end
        end
    end
end
addEventHandler(res..":darLlave", root, darLlave)

function agregarBloqueado(nombre, id, player)
    local pj_id = getPersonajeIDFromName(nombre)
    if pj_id then
        local result = exports["RPA-SQL"]:querypoll("INSERT INTO mta_casas_bloqueados (id_personaje, id_casa) VALUES (?, ?)", pj_id, id)
        if result then
            if result[2] == 1 then
                if player then
                    outputChatBox("Bloqueaste a "..nombre.." en la casa #FFFF00#"..id..".", player, 0, 255, 0, true)
                end
                return true
            else
                if player then
                    outputChatBox("No se pudo bloquear a "..nombre.." de la casa #FFFF00#"..id..".", player, 0, 255, 0, true)
                end
                return nombre.." ya se encuentra bloqueado."
            end
        end
	else
		return nombre.." no existe."
    end
    return false
end

addEvent(res..":bloquear", true)
function bloquear(nombre, id)
    if casas_parents[id] and isElement(casas_parents[id]) then
        local data = casas_parents[id]:getData("Casa_Data")
        if data then
            if data.propietario ~= nombre then
                if data.rentador ~= nombre then
                	local result = agregarBloqueado(nombre, id)
                    if result == true then
                        outputChatBox("Bloqueaste a "..nombre.." en la casa #FFFF00#"..id..".", source, 0, 255, 0, true)
                        local bloqueados = obtenerBloqueados(id)
			        	if bloqueados then
			        		triggerClientEvent(source, res..":sendBloqueados", source, bloqueados)
			        	end
                    elseif result == false then
                        avisos2(source, "Algo salio mal al bloquear al jugador.", 255, 0, 0)
                    else
                    	avisos2(source, result, 255, 0, 0)
                    end
                else
                    avisos2(source, "El nombre escrito es del rentador, no puedes bloquearlo, primero da click en (Eliminar rentador).", 255, 0, 0)
                end
            else
                avisos2(source, "El nombre escrito es del propietario, no puedes bloquearlo.", 255, 0, 0)
            end
        end
    end
end
addEventHandler(res..":bloquear", root, bloquear)

function eliminarLlave(nombre, id, player)
    local pj_id = getPersonajeIDFromName(nombre)
    if pj_id then
        local result = exports["RPA-SQL"]:querypoll("DELETE FROM mta_casas_llaves WHERE id_personaje=? AND id_casa=?", pj_id, id)
        if result then
            if result[2] == 1 then
                if player then
                    outputChatBox("Eliminaste la llave de "..nombre.." en la casa #FFFF00#"..id..".", player, 0, 255, 0, true)
                end
                return true
            else
                if player then
                    outputChatBox("No se pudo eliminar la llave de "..nombre.." en la casa #FFFF00#"..id..".", player, 0, 255, 0, true)
                end
                return nombre.." no tiene una llave."
            end
        end
	else
		return nombre.." no existe."
    end
    return false
end

addEvent(res..":quitarLlave", true)
function quitarLlave(nombre, id)
    if casas_parents[id] and isElement(casas_parents[id]) then
        local data = casas_parents[id]:getData("Casa_Data")
        if data then
            if data.propietario ~= nombre then
                if data.rentador ~= nombre then
                	local result = eliminarLlave(nombre, id)
                    if result == true then
                        outputChatBox("Eliminaste la llave de "..nombre.." en la casa #FFFF00#"..id..".", source, 0, 255, 0, true)
                        local llaves = obtenerLlaves(id)
			        	if llaves then
			        		triggerClientEvent(source, res..":sendLlaves", source, llaves)
			        	end
                    elseif result == false then
                        avisos2(source, "Algo salio mal al eliminar la llave.", 255, 0, 0)
                    else
                    	avisos2(source, result, 255, 0, 0)
                    end
                else
                    avisos2(source, "El nombre seleccionado es del rentador, para borrar su llave haz click en (Eliminar rentador).", 255, 0, 0)
                end
            else
                avisos2(source, "El nombre seleccionado es del propietario, no puedes quitarle su llave.", 255, 0, 0)
            end
        end
    end
end
addEventHandler(res..":quitarLlave", root, quitarLlave)


function eliminarBloqueo(nombre, id, player)
    local pj_id = getPersonajeIDFromName(nombre)
    if pj_id then
        local result = exports["RPA-SQL"]:querypoll("DELETE FROM mta_casas_bloqueados WHERE id_personaje=? AND id_casa=?", pj_id, id)
        if result then
            if result[2] == 1 then
                if player then
                    outputChatBox("Eliminaste el bloqueo de "..nombre.." en la casa #FFFF00#"..id, player, 0, 255, 0, true)
                end
                return true
            else
                if player then
                    outputChatBox("No se pudo eliminar el bloqueo de "..nombre.." en la casa #FFFF00#"..id, player, 0, 255, 0, true)
                end
                return nombre.." no esta bloqueado"
            end
        end
	else
		return nombre.." no existe"
    end
    return false
end

addEvent(res..":desbloquear", true)
function desbloquear(nombre, id)
    if casas_parents[id] and isElement(casas_parents[id]) then
        local data = casas_parents[id]:getData("Casa_Data")
        if data then
        	local result = eliminarBloqueo(nombre, id)
            if result == true then
                outputChatBox("Desbloqueaste a "..nombre.." en la casa #FFFF00#"..id..".", source, 0, 255, 0, true)
                local bloqueados = obtenerBloqueados(id)
	        	if bloqueados then
	        		triggerClientEvent(source, res..":sendBloqueados", source, bloqueados)
	        	end
            elseif result == false then
                avisos2(source, "Algo salio mal al bloquear al jugador.", 255, 0, 0)
            else
            	avisos2(source, result, 255, 0, 0)
            end
        end
    end
end
addEventHandler(res..":desbloquear", root, desbloquear)

-- >>Inicio Permisos<<
addEvent(res..":eliminarPermiso", true)
function eliminarPermiso(jugador, permiso, id)
    if casas_parents[id] and isElement(casas_parents[id]) then
        local data = casas_parents[id]:getData("Casa_Data")
        if data then
            local pj_id = getPersonajeIDFromName(jugador)
            if pj_id then
                local id_permiso = data_permisos2[permiso]
                if id_permiso ~= "1" then
                    local permisos = getPersonajePermisosTable(jugador, id)
                    if not permisos["1"] then
                        permisos[id_permiso] = nil
                        local json = toJSON(permisos)
                        local result = exports["RPA-SQL"]:querypoll("UPDATE mta_casas_llaves SET permisos=? WHERE id_casa=? AND id_personaje=?", json, id, pj_id)
                        if result then
                            if result[2] == 1 then
                                outputChatBox("Le quitaste el permiso ("..permiso..") a "..jugador..".", source, 255, 255, 0, true)
                            else
                                outputChatBox(jugador.." no posee el permiso ("..permiso..").", source, 255, 0, 0, true)
                            end
                        else
                            avisos2(source, "Algo salio mal al remover el permiso.", 255, 0, 0)
                        end
                        local llaves = obtenerLlaves(id)
                        if llaves then
                            triggerClientEvent(source, res..":sendLlaves", source, llaves)
                        end
                    else
                        outputChatBox(jugador.." posee todos los permisos, no puedes removerle ningun permiso.", source, 255, 0, 0, true)
                    end
                else
                    avisos2(source, "Este permiso no se puede remover (solo administradores).", 255, 0, 0)
                end
            else
                avisos2(source, "No se encontro un jugador con ese nombre.", 255, 0, 0)
            end
        end
    end
end
addEventHandler(res..":eliminarPermiso", root, eliminarPermiso)

addEvent(res..":agregarPermiso", true)
function agregarPermiso(jugador, permiso, id)
    if casas_parents[id] and isElement(casas_parents[id]) then
        local data = casas_parents[id]:getData("Casa_Data")
        if data then
            local pj_id = getPersonajeIDFromName(jugador)
            if pj_id then
                local id_permiso = data_permisos2[permiso]
                if id_permiso ~= "1" then
                    local permisos = getPersonajePermisosTable(jugador, id)
                    if not permisos["1"] then
                        permisos[id_permiso] = true
                        local json = toJSON(permisos)
                        local result = exports["RPA-SQL"]:querypoll("UPDATE mta_casas_llaves SET permisos=? WHERE id_casa=? AND id_personaje=?", json, id, pj_id)
                        if result then
                            if result[2] == 1 then
                                outputChatBox("Le diste el permiso ("..permiso..") a "..jugador..".", source, 0, 255, 0, true)
                            else
                                outputChatBox(jugador.." ya posee el permiso ("..permiso..").", source, 255, 0, 0, true)
                            end
                        else
                            avisos2(source, "Algo salio mal al remover el permiso.", 255, 0, 0)
                        end
                        local llaves = obtenerLlaves(id)
                        if llaves then
                            triggerClientEvent(source, res..":sendLlaves", source, llaves)
                        end
                    else
                        outputChatBox(jugador.." ya posee todos los permisos.", source, 255, 0, 0, true)
                    end
                else
                    avisos2(source, jugador.." no puedes agregar este permiso (solo administradores).", 255, 0, 0)
                end
            else
                avisos2(source, "No se encontro un jugador con ese nombre.", 255, 0, 0)
            end
        end
    end
end
addEventHandler(res..":agregarPermiso", root, agregarPermiso)

addEvent(res..":eliminarPermisos", true)
function eliminarPermisos(jugador, id)
    if casas_parents[id] and isElement(casas_parents[id]) then
        local data = casas_parents[id]:getData("Casa_Data")
        if data then
            local pj_id = getPersonajeIDFromName(jugador)
            if pj_id then
                local permisos = getPersonajePermisosTable(jugador, id)
                if not permisos["1"] then
                    local json = toJSON({})
                    local result = exports["RPA-SQL"]:querypoll("UPDATE mta_casas_llaves SET permisos=? WHERE id_casa=? AND id_personaje=?", json, id, pj_id)
                    if result then
                        if result[2] == 1 then
                            outputChatBox("Removiste todos los permisos de "..jugador..".", source, 0, 255, 0, true)
                        else
                            outputChatBox(jugador.." no posee ningun permiso.", source, 255, 0, 0, true)
                        end
                    else
                        avisos2(source, "Algo salio mal al remover el permiso.", 255, 0, 0)
                    end
                    local llaves = obtenerLlaves(id)
                    if llaves then
                        triggerClientEvent(source, res..":sendLlaves", source, llaves)
                    end
                else
                    outputChatBox(jugador.." posee todos los permisos, no puedes removerle ningun permiso.", source, 255, 0, 0, true)
                end
            else
                avisos2(source, "No se encontro un jugador con ese nombre.", 255, 0, 0)
            end
        end
    end
end
addEventHandler(res..":eliminarPermisos", root, eliminarPermisos)
-- >>Fin Permisos<<

-- >>Inicio ver casa<<
addEvent(res..":verCasa", true)
function verCasa(id)
    if casas_parents[id] and isElement(casas_parents[id]) then
        local data = casas_parents[id]:getData("Casa_Data")
        if data then
            if not source:isBloqueado(id) then
                if data.propietario ~= source:getNombre() then
                    outputChatBox("Tienes "..duracion_vercasa.." segundos para ver esta casa.", player, 0, 255, 0)
                    local x, y, z, r, int, dim = data.salida_tx, data.salida_ty, data.salida_tz, data.salida_rot, data.salida_int, data.salida_dim
                    startWarpTo(source, x, y, z, r, int, dim, _, id, "entrada")
                    Timer(terminarVerCasa, (duracion_vercasa+4)*1000, 1, source, id)
                    source:setData("ViendoCasa", id)
                else
                    avisos2(source, "Ya eres el propietario de esta casa.", 255, 0, 0)
                end
            else
                avisos2(source, "Estas bloqueado en esta propiedad.", 255, 0, 0)
            end
        end
    end
end
addEventHandler(res..":verCasa", root, verCasa)

function terminarVerCasa(player, id)
    if isElement(player) then
        if casas_parents[id] and isElement(casas_parents[id]) then
            local data = casas_parents[id]:getData("Casa_Data")
            if data then
                outputChatBox("Tu tiempo para ver la casa termino.", player, 255, 255, 0)
                local x, y, z, r, int, dim = data.entrada_tx, data.entrada_ty, data.entrada_tz, data.entrada_rot, data.entrada_int, data.entrada_dim
                startWarpTo(player, x, y, z, r, int, dim, _, id, "salida")
                player:removeData("ViendoCasa")
            end
        end
    end
end
-- >>Fin ver casa<<

-- >>Inicio cobro<<

-- >>Fin cobro<<