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)