• TibiaFace

    Tibiaface | Una comunidad Open Tibia donde encontras : mapas, scripts, Otserver, npc y amigos etc ...

    .
    demo menumenu

    Afiliados



    Votar:

    [Aporte] COFRE MULTIPLE CON TIEMPO TFS 1,3

    Compartir:

    Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje (Página 1 de 1.)

    1Thông báo [Aporte] COFRE MULTIPLE CON TIEMPO TFS 1,3 Vie Mayo 26, 2023 11:35 pm

    GalaxyDev

    GalaxyDev
    Miembro
    Miembro
    El código implementa la funcionalidad de dos cofres VIP en el juego, donde cada cofre tiene un tiempo de enfriamiento (cooldown) de 24 horas antes de que pueda ser abierto nuevamente. Además, se definen las recompensas para cada cofre.

    A continuación, te explicaré paso a paso cómo funciona el código y cómo puedes realizar modificaciones:

    El código comienza definiendo una tabla uids que asigna un identificador único a cada cofre. Esto se utiliza para distinguir entre los cofres en la lógica del código. Puedes agregar o eliminar más cofres si lo deseas, solo asegúrate de proporcionar un identificador único y asignarle un valor numérico.

    Se define la variable cooldownTime que representa el tiempo de enfriamiento en segundos. En este caso, se establece en 24 horas multiplicadas por 60 minutos por 60 segundos. Puedes ajustar este valor según tus necesidades.

    La tabla rewards asigna una recompensa a cada cofre. Para cada cofre, se especifica el identificador del item (itemId) y la cantidad (count) de ese item como recompensa. Puedes cambiar los valores de los items según tus necesidades.

    Se crea una instancia de la acción utilizando Action() y se agregan los uids de los cofres utilizando el método uid(uid) en un bucle for. Esto asegura que la acción esté registrada para los cofres específicos.

    La función action.onUse se ejecuta cuando un jugador intenta usar uno de los cofres. Comienza verificando si el jugador tiene el nivel necesario para abrir los cofres. En este caso, el nivel requerido es 1000. Puedes ajustar este nivel cambiando el número en la línea if player:getLevel() < 1000 then.

    Luego, se verifica si el cofre seleccionado tiene una recompensa asociada en la tabla rewards. Si existe una recompensa para ese cofre, se procede a verificar el tiempo de enfriamiento.

    Se obtiene el tiempo de la última recompensa obtenida por el jugador utilizando player:getStorageValue(uid). Si el valor es 0, significa que el jugador no ha obtenido una recompensa anteriormente y puede obtenerla de inmediato. Si hay un valor almacenado, se compara con el tiempo actual para determinar si ha pasado el tiempo de enfriamiento.

    Si ha pasado el tiempo de enfriamiento o el jugador no ha obtenido una recompensa anteriormente, se utiliza la función multipleRewardsChest para otorgar la recompensa al jugador. Se pasa el uid del cofre, el ID del item del cofre (1987 en este caso) y la recompensa específica del cofre. Luego, se guarda el nuevo tiempo de recompensa obtenida utilizando player:setStorageValue(uid, currentTime).

    Si aún no ha pasado el tiempo de enfriamiento desde la última recompensa obtenida, se calcula el tiempo restante en horas, minutos y segundos. Se envía un mensaje al jugador indicando el tiempo restante antes de que pueda abrir el cofre nuevamente.

    Finalmente, se registra la acción utilizando action:register(-1) para que esté disponible en el juego.

    Puedes modificar el código según tus necesidades ajustando los uids, los tiempos de enfriamiento, las recompensas y los requisitos de nivel.


    Embarassed

    Código:
    local uids = {
        chest1 = 4344,
        chest2 = 4343
    }

    local cooldownTime = 24 * 60 * 60 -- Tiempo de enfriamiento en segundos (24 horas)
    local rewards = {
        [uids.chest1] = {itemId = 28385, count = 1}, -- ITEM
        [uids.chest2] = {itemId = 28385, count = 1} -- ITEM
    }

    local action = Action()
    for _, uid in pairs(uids) do
        action:uid(uid)
    end

    function action.onUse(player, item, fromPosition, target, toPosition, isHotkey)
        if player:getLevel() < 1000 then
            player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Necesitas ser nivel 1000 para abrir los cofres VIP.")
            return true
        end

        local uid = item.uid
        local reward = rewards[uid]

        if reward then
            local lastRewardTime = player:getStorageValue(uid) -- Obtener el tiempo de la última recompensa obtenida
            local currentTime = os.time() -- Obtener el tiempo actual en segundos

            if lastRewardTime == 0 or (currentTime - lastRewardTime >= cooldownTime) then
                -- El jugador puede obtener la recompensa nuevamente (no hay registro anterior o ha pasado el tiempo de enfriamiento)
                multipleRewardsChest(player, uid, 1987, {reward}) -- 1987 = BAG CAFE
                player:setStorageValue(uid, currentTime) -- Guardar el nuevo tiempo de recompensa obtenida
            else
                local remainingTime = cooldownTime - (currentTime - lastRewardTime)
                local hours = math.floor(remainingTime / 3600)
                local minutes = math.floor((remainingTime % 3600) / 60)
                local seconds = remainingTime % 60
                player:sendTextMessage(MESSAGE_EVENT_ADVANCE, string.format("Debes esperar %02d:%02d:%02d para abrir el cofre nuevamente.", hours, minutes, seconds))
            end

            return true
        end

        return false
    end

    action:register(-1)



    [Tienes que estar registrado y conectado para ver este vínculo] Servidor 24/7 Full Animes  Smile    MI GITHUB (REVSCRIPTS TFS 1.3-1.5))

    Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje (Página 1 de 1.)

    Permisos de este foro:
    No puedes responder a temas en este foro.

     

    BienvenidosTibiaFace es una comunidad de Open Tibia. Para participar debes estar registrado (click para Regístrate).