Jump to content

Retirar Anuncio Com o Mesmo Comando


Recommended Posts

Bem, eu  achei um codigo que exibe um "shout" na tela de todos os players
a principio o script funcionava com setTimer para a mensagem sumir depois
de determinado tempo, mais eu gostaria que o anuncio sumisse utilizando
o mesmo comando codigo abaixo:
 

            function announceScript(player, cmd, ...)
               for id, players in ipairs(getElementsByType("player")) do
                  local message = table.concat({...}," ")
                  local textChat = textCreateDisplay()
                  local textItem = textCreateTextItem("Teste", 0.5, 0.5, 1.5, 0, 0, 0, 255, 2, "center", "center")
                  textDisplayAddText(textChat, textItem)
                  textDisplayAddObserver(textChat, players)
               end
            end
            addCommandHandler("anuncio", announceScript)

 

Link to comment
Just now, androksi said:

Olá, @SciptNovato!

Use a função textDestroyDisplay em conjunto à função setTimer. Lembrando que essa não é a melhor forma de fazer, estou apenas respondendo sua dúvida. :)

do textDestroyDisplay eu ja estava ciente, e o setTimer a principio ja estava sendo usado no codigo
o que eu quero e retirar o anuncio com o mesmo comando, e não que o anuncio suma depois de certo
tempo.

Link to comment
  • Other Languages Moderators

Ah, sim!!! Desculpe-me o engano. Bom, do jeito mais simples possível, você pode criar uma variável de estado e alterná-la para verdadeiro ou falso. Dependendo do estado atual, você executa um trecho de código. Mas de qualquer forma, você precisa usar uma tabela para armazenar quem está vendo o anúncio.

Exemplo:

local announce = {
    active = false,
    players = {}
}

addCommandHandler("anuncio", function(player, command, ...)
    local args = { ... }
    if #args > 0 then
        announce.active = not announce.active -- Alterna o estado do anúncio para true/false.

        if announce.active then -- Caso seja true.
            local message = table.concat(args, " ")
            local allPlayers = getElementsByType("player") -- Obtém a tabela que contém todos os jogadores do servidor.

            for i = 1, #allPlayers do -- Usamos um laço de repetição BEM MAIS RÁPIDO para pegar cada jogador.
                local p = allPlayers[i] -- Jogador.
                local display = textCreateDisplay()
                local text = textCreateTextItem(message, 0.5, 0.5, 1.5, 0, 0, 0, 255, 2, "center", "center")
                textDisplayAddText(display, text)
                textDisplayAddObserver(display, p)
                announce.players[p] = display -- Armazena o jogador na indíce da tabela, como o display sendo o seu valor.
            end
        else -- Se for false.
            for p, display in pairs(announce.players) do -- Faz um laço de repetição em todos os displays, que foram salvos em cada jogador.
                -- p = nossa índice (jogador), display (o display)
                if isElement(p) then
                    textDisplayRemoveObserver(display, p) -- Remove o display do jogador.
                    textDestroyDisplay(display) -- Destrói o display.
                end
            end
            announce.players = {} -- Limpa a tabela.
        end
    end
end)

 

  • Like 1
Link to comment
22 hours ago, androksi said:

Ah, sim!!! Desculpe-me o engano. Bom, do jeito mais simples possível, você pode criar uma variável de estado e alterná-la para verdadeiro ou falso. Dependendo do estado atual, você executa um trecho de código. Mas de qualquer forma, você precisa usar uma tabela para armazenar quem está vendo o anúncio.

Exemplo:

local announce = {
    active = false,
    players = {}
}

addCommandHandler("anuncio", function(player, command, ...)
    local args = { ... }
    if #args > 0 then
        announce.active = not announce.active -- Alterna o estado do anúncio para true/false.

        if announce.active then -- Caso seja true.
            local message = table.concat(args, " ")
            local allPlayers = getElementsByType("player") -- Obtém a tabela que contém todos os jogadores do servidor.

            for i = 1, #allPlayers do -- Usamos um laço de repetição BEM MAIS RÁPIDO para pegar cada jogador.
                local p = allPlayers[i] -- Jogador.
                local display = textCreateDisplay()
                local text = textCreateTextItem(message, 0.5, 0.5, 1.5, 0, 0, 0, 255, 2, "center", "center")
                textDisplayAddText(display, text)
                textDisplayAddObserver(display, p)
                announce.players[p] = display -- Armazena o jogador na indíce da tabela, como o display sendo o seu valor.
            end
        else -- Se for false.
            for p, display in pairs(announce.players) do -- Faz um laço de repetição em todos os displays, que foram salvos em cada jogador.
                -- p = nossa índice (jogador), display (o display)
                if isElement(p) then
                    textDisplayRemoveObserver(display, p) -- Remove o display do jogador.
                    textDestroyDisplay(display) -- Destrói o display.
                end
            end
            announce.players = {} -- Limpa a tabela.
        end
    end
end)

 

Valeu

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...