Scripts com delays permitem criar mecânicas temporais complexas no servidor de Tibia, como sequências de eventos, cooldowns, e animações. Este guia mostra como implementar delays avançados em scripts Lua.
Entendendo delays em Lua
Delays são pausas no código que permitem que ações aconteçam após período de tempo determinado. Em servidores de Tibia, delays são essenciais para: criar sequências de eventos, implementar cooldowns de habilidades, animar efeitos visuais progressivos, e criar mecânicas baseadas em tempo. A maioria das engines de Tibia oferece funções como addEvent ou doAddEvent que executam código após delay especificado. Entenda a diferença entre delays síncronos (bloqueiam execução) e assíncronos (não bloqueiam), e quando usar cada um.
Funções básicas de delay
A função mais comum é addEvent(function, delay) que executa função após delay em milissegundos. Use para ações únicas após tempo determinado. Para ações repetidas, use addEvent dentro da própria função para criar loop. Exemplo: addEvent(function() doSendMagicEffect(pos, CONST_ME_FIREAREA) addEvent(arguments.callee, 1000) end, 1000) cria efeito que se repete a cada segundo. Para cancelar eventos agendados, use stopEvent(eventId) se a engine suportar. Entenda limitações: muitos eventos simultâneos podem impactar performance.
Criando sequências temporais
Use delays para criar sequências onde ações acontecem em ordem: primeira ação imediata, segunda após 1 segundo, terceira após 2 segundos, etc. Implemente usando múltiplos addEvent encadeados ou função recursiva que agenda próxima ação. Exemplo prático: boss que lança ataque, depois spawna adds após 3 segundos, depois usa habilidade especial após 5 segundos. Use variáveis para rastrear estado da sequência e permitir cancelamento se necessário. Implemente sistema de “fase” onde diferentes sequências acontecem baseadas em condições (HP do boss, tempo decorrido, etc.).
Sistema de cooldowns
Implemente cooldowns usando delays e storages: quando jogador usa habilidade, registre timestamp atual em storage, e verifique se tempo suficiente passou antes de permitir uso novamente. Use os.time() para obter timestamp atual e compare com timestamp armazenado. Para cooldowns visuais, use addEvent para atualizar interface do jogador mostrando tempo restante. Implemente sistema de cooldown global (todas as habilidades) e cooldowns individuais por habilidade. Crie sistema de redução de cooldown baseado em itens ou buffs. Permita que administradores ajustem cooldowns dinamicamente.
Animações e efeitos progressivos
Crie animações usando delays para atualizar efeitos visuais progressivamente: use loop com addEvent que muda efeito a cada iteração. Exemplo: círculo de fogo que se expande – a cada 200ms, aumenta raio e atualiza efeito visual. Para efeitos complexos, crie tabela de “frames” onde cada frame define estado do efeito em momento específico, e use delays para avançar entre frames. Implemente sistema de interpolação para transições suaves entre estados. Use delays para sincronizar múltiplos efeitos: vários efeitos que começam juntos ou em sequência coordenada.
Otimização e boas práticas
Evite criar muitos eventos simultâneos: limite número de eventos ativos, use pooling de eventos quando possível, e cancele eventos desnecessários. Implemente sistema de “event manager” que gerencia todos os eventos centralmente e pode pausar/retomar quando necessário. Use delays apropriados: muito curtos (menos de 50ms) podem sobrecarregar servidor, muito longos podem fazer ações parecerem lentas. Teste extensivamente para garantir que eventos não se acumulam e causam memory leaks. Documente todos os delays usados para facilitar manutenção futura.
FAQ
Qual é o delay mínimo recomendado?
Depende da engine, mas geralmente 50-100ms é mínimo prático. Delays menores podem causar problemas de performance e não são perceptíveis para jogadores.
Posso cancelar eventos já agendados?
Depende da engine. Algumas suportam stopEvent com ID do evento, outras não. Se não suportar, use flags em storages para verificar se evento ainda deve executar.
Muitos delays afetam performance?
Sim, especialmente se houver centenas ou milhares de eventos simultâneos. Otimize usando menos eventos, delays maiores quando possível, e sistema de gerenciamento centralizado.
Com scripts de delay bem implementados, o servidor de Tibia oferece mecânicas temporais complexas que criam experiências dinâmicas e envolventes.
