SCRIPT DE TIMESPELL

                SCRIPT DE TIME SPELL SIMPLES 




local xtela, ytela = 680, 440 -- Posição na Tela
local widget = setupUI([[
Panel
  height: 400 -- altura da sua tela 
  width: 900 -- largura da sua tela 
]], g_ui.getRootWidget())
local timespell = g_ui.loadUIFromString([[
Label
  color: white
  background-color: lightblue
  opacity: 0.85
  text-horizontal-auto-resize: true
]], widget)
local function updateTimespell()
  if not storage.iwjdijwx.t or storage.iwjdijwx.t < now then
    timespell:setText('Dai Prision: OK! ')  
    timespell:setColor('green')
  elseif storage.iwjdijwx.a >= now then
    timespell:setColor('blue')
    timespell:setText("Dai Prision: ".. string.format("%.0f",(storage.iwjdijwx.a-now)/1000).. "s ")
  else
    timespell:setColor('red')
    timespell:setText("Dai Prision: ".. string.format("%.0f",(storage.iwjdijwx.t-now)/1000).. "s ")
  end
end
macro(1, function()
  updateTimespell()
end)
onTalk(function(name, level, mode, text, channelId, pos)
  if name ~= player:getName() then return end
  if text:lower() == 'mokuton moku douka' then
    if storage.iwjdijwx.useCount == nil then
      storage.iwjdijwx.useCount = 0
      storage.iwjdijwx.cooldown = 0
    end
    if storage.iwjdijwx.useCount == 0 and storage.iwjdijwx.cooldown < now then
      storage.iwjdijwx.t = now + 5000 -- 5 seconds cooldown after first use
      storage.iwjdijwx.a = now + 10000 -- 10 seconds cooldown for the spell
      storage.iwjdijwx.useCount = 1
    elseif storage.iwjdijwx.useCount == 1 and storage.iwjdijwx.t < now then
      storage.iwjdijwx.t = now + 45000 -- 45 seconds cooldown after two uses
      storage.iwjdijwx.useCount = 0
      storage.iwjdijwx.a = now + 10000 -- 10 seconds cooldown for the spell
    end
  end
end)
if type(storage.iwjdijwx) ~= 'table' or (storage.iwjdijwx.t - now) > 50000 then
  storage.iwjdijwx = {t = 0, a = 0, useCount = 0, cooldown = 0}
end
timespell:setPosition({y = ytela+40, x =  xtela+10})




 


            IMAGEM DE EXEMPLO :




EXPLICAÇÃO DE AJUSTES :  

Definição de variáveis de posição e widgets

  1. Posição na tela:


    local xtela, ytela = 680, 440 -- Posição na Tela

    Define a posição na tela onde o widget será exibido. xtela e ytela são coordenadas X e Y.

  2. Criação da Interface Gráfica:


    local widget = setupUI([[...]], g_ui.getRootWidget())

    A função setupUI cria um painel que servirá como contêiner para outros widgets. Esse painel tem uma altura de 400 e uma largura de 900, conforme os parâmetros definidos. g_ui.getRootWidget() retorna o widget raiz onde a interface será inserida.

  3. Criação de um label (texto):


    local timespell = g_ui.loadUIFromString([[...]], widget)

    Aqui, a função g_ui.loadUIFromString cria um widget do tipo Label (uma área de texto) que será exibido no painel criado anteriormente (widget). O label tem:

    • Cor de texto: Branco
    • Cor de fundo: Azul claro
    • Opacidade: 85%
    • Redimensionamento horizontal automático do texto, para que o texto ajuste automaticamente ao tamanho da área disponível.

Função de atualização do tempo do feitiço

  1. Função updateTimespell():

    local function updateTimespell()
    Esta função atualiza o texto do timespell de acordo com o tempo de cooldown de uma habilidade chamada "Dai Prision". O comportamento muda dependendo dos tempos armazenados em storage.iwjdijwx:
    • Se o feitiço estiver pronto (storage.iwjdijwx.t é menor que o tempo atual):
      • Exibe "Dai Prision: OK!" com cor verde.
    • Se a habilidade estiver em cooldown, mas disponível:
      • Exibe o tempo restante até o feitiço estar disponível, em segundos, com a cor azul.
    • Se a habilidade estiver em cooldown completo:
      • Exibe o tempo restante até o próximo uso, também em segundos, mas com a cor vermelha.

Ações quando o jogador fala um comando

  1. Comando "mokuton moku douka":

    onTalk(function(name, level, mode, text, channelId, pos)
    Quando o jogador (ou alguém) fala algo no jogo, o script verifica se o texto é "mokuton moku douka". Se for o caso, ele executa o código abaixo:
    • Se for a primeira vez que o feitiço é usado (controle de uso com storage.iwjdijwx.useCount):
      • Cooldown de 5 segundos após o primeiro uso.
      • Cooldown do feitiço de 10 segundos.
    • Após o segundo uso, o cooldown aumenta para 45 segundos, e a contagem de usos (useCount) volta a 0.

Garantia de inicialização correta de dados

  1. Verificação e inicialização de storage.iwjdijwx:

    if type(storage.iwjdijwx) ~= 'table' or (storage.iwjdijwx.t - now) > 50000 then storage.iwjdijwx = {t = 0, a = 0, useCount = 0, cooldown = 0} end
    Aqui, o script verifica se a tabela storage.iwjdijwx existe e se os valores de cooldown são razoáveis. Caso contrário, ele a inicializa com valores padrões (t, a, useCount, e cooldown).

Posição do widget

  1. Posicionando o widget na tela:

    timespell:setPosition({y = ytela+40, x = xtela+10})
    Define a posição exata do widget (timespell) na tela, com uma pequena margem adicional em relação às variáveis xtela e ytela.

Resumo do que o código faz:

  • Ele cria um painel e um texto na interface do jogo que exibe o status do feitiço "Dai Prision".
  • Quando o jogador usa o comando "mokuton moku douka", ele controla o cooldown do feitiço, alternando entre 5, 45 segundos e 10 segundos de espera entre os usos.
  • O texto na tela é atualizado constantemente para refletir o estado atual do feitiço (pronto, em cooldown, ou aguardando).

Comentários