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.