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)