Como Hacer Puerta Con Comando y ACL

Este es el codigo utilizado para hacer las puertas con comando y acl

Link Video Y Explicacion

Primera Puerta

Para crear una puerta, comenzaremos por crear un objeto con la funcion createObject en la posición deseada y una bandera que nos indicará si la puerta está abierta o cerrada. Dependiendo del estado de la puerta, se ejecutará un código que moverá el objeto creado, ya sea horizontal o verticalmente, según la preferencia. Posteriormente, la bandera se modificará para que se ejecute el código opuesto al cerrar o abrir la puerta. Finalmente, con la función addCommandHandler, asignaremos un comando para abrir y cerrar la puerta según la dirección deseada.

Segunda Puerta

En este caso, seguiremos el mismo proceso que con la puerta anterior, pero añadiremos una validación adicional con la función isObjectInACLGroup. Esta validación verificará si el jugador que emite el comando pertenece al grupo ACL definido en el código. Solo si se cumple esta condición, se permitirá el movimiento de la puerta.

Tercera Puerta

Para esta puerta, el proceso es diferente, ya que no necesitamos una bandera. En su lugar, crearemos una colisión utilizando createColRectangle con el tamaño adecuado para que la puerta se abra y cierre. Para detectar cuando un jugador entra o sale de la colisión creada, utilizaremos los eventos onColShapeHit y onColShapeLeave. Además, implementaremos dos funciones, una para cada uno de estos eventos, donde podremos validar si el jugador pertenece al grupo ACL, si es necesario, antes de continuar con el movimiento del objeto mediante la función moveObject

puerta1 = createObject(11102, -1436.8475341797, 474.90548706055, 7.1875)
puertaAbierta1 = false

function abrirPuerta1()
    if not puertaAbierta1 then
        moveObject(puerta1, 2000, -1436.8475341797, 474.90548706055, 3.1875)
        puertaAbierta1 = true
    else
        moveObject(puerta1, 2000, -1436.8475341797, 474.90548706055, 7.1875)
        puertaAbierta1 = false
    end
end
addCommandHandler("abrir", abrirPuerta1)

puerta2 = createObject(11102, -1436.8475341797, 465.30551147461, 7.1875)
puertaAbierta2 = false

function abrirPuerta2(source)
    local accName = getAccountName ( getPlayerAccount ( source ) )
    if isObjectInACLGroup ("user."..accName, aclGetGroup ( "VIP" ) ) then
        if not puertaAbierta2 then
            moveObject(puerta2, 2000, -1436.8475341797, 465.30551147461, 3.1875)
            puertaAbierta2 = true
        else
            moveObject(puerta2, 2000, -1436.8475341797, 465.30551147461, 7.1875)
            puertaAbierta2 = false
        end
    else
        outputChatBox("No eres vip para abrir la puerta", source)
    end
end
addCommandHandler("abrirv", abrirPuerta2)

puerta3 = createObject(11102, -1436.8475341797, 456.30551147461, 7.1875)
rangoEntrada = createColRectangle(-1443.2701416016, 453.85980224609, 10, 5)

function abrirPuertaAcercarse(source)
    local accName = getAccountName ( getPlayerAccount ( source ) )
    if isObjectInACLGroup ("user."..accName, aclGetGroup ( "VIP" ) ) then
        moveObject(puerta3, 2000, -1436.8475341797, 456.30551147461, 3.1875)
    else
        outputChatBox("No eres vip para abrir la puerta", source)
    end
end

function cerrarPuertaAcercarse(source)
    local accName = getAccountName ( getPlayerAccount ( source ) )
    if isObjectInACLGroup ("user."..accName, aclGetGroup ( "VIP" ) ) then
        moveObject(puerta3, 2000, -1436.8475341797, 456.30551147461, 7.1875)
    else
        outputChatBox("No eres vip para abrir la puerta", source)
    end
end

addEventHandler("onColShapeHit", rangoEntrada, abrirPuertaAcercarse)
addEventHandler("onColShapeLeave", rangoEntrada, cerrarPuertaAcercarse)

Aporte por:   Nicolas ECM

Curso Programacion en LUA para MTA

Aprende a programar desde 0 hasta avanzado
con ejercicios practicos para mejorar tus habilidades