> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dkscripts.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Funções em client

> Funções utilitárias executadas no lado do cliente, responsáveis por controle de animações, cooldowns, e interação com players próximos.

## Visão Geral

Esse arquivo concentra funções executadas no lado do cliente, acessadas via `Config.clientFuncs`, e utilizadas pelo painel de animações e também pelos exports disponíveis.

O objetivo é fornecer uma base de controle para:

* Validação de animações.
* Controle de execução com cooldown.
* Interação com outros jogadores próximos.
* Hooks para quando a animação começa ou termina.
* Bloqueio de teclas durante animações.

***

## Funções Disponíveis

### `canPlayAnim(id: string): boolean`

Verifica se o jogador pode iniciar uma animação. Retorna `false` se o jogador estiver "morto" (vida abaixo de 101) ou se estiver em cooldown.

> Exibe um notify com o tempo restante de cooldown, se necessário.

***

### `getNearestPlayer(target?: integer, distance: integer): integer|nil`

Busca a **source do player mais próximo**, respeitando a distância definida.\
Caso um target seja passado, ele é utilizado diretamente.

> Se nenhum player estiver por perto, exibe uma notificação e retorna `nil`.

***

### `onStartAnim(id: string, target: integer): void`

Hook executado **assim que a animação começa**.\
Você pode modificar o comportamento aqui, como mudar estados locais ou logar eventos.

***

### `onStopAnim(id: string, target: integer): void`

Hook executado **quando a animação para**.\
Também personalizável para alterar o estado do jogador, etc.

***

### `blockButtons(blockedToRun: boolean, blockButtons: boolean): void`

Função executada em loop enquanto a animação está ativa.

* `blockedToRun`: se `true`, bloqueia a tecla de correr (`Shift`).
* `blockButtons`: se `true`, bloqueia uma lista completa de botões que poderiam interferir na animação.

Ideal para animações que não podem ser interrompidas.

***

## Cooldown Embutido

O script já vem com uma lógica simples e eficaz de cooldown:

```lua theme={null}
local playAnimCooldown = Cooldown:new(2) -- tempo em segundos
```

> Isso evita spam no servidor e permite uma camada de controle por parte do desenvolvedor.

Você pode ajustar esse tempo facilmente alterando o valor ao instanciar o `Cooldown`.

***

## Personalização

Essas funções foram projetadas para serem simples de alterar ou estender. Você pode, por exemplo:

* Adicionar novas validações em `canPlayAnim`.
* Alterar notificações.
* Modificar os botões bloqueados conforme o tipo de animação.

***

## Conclusão

O `functions.lua` do lado cliente é essencial para manter o controle das execuções de animações de forma segura, organizada e leve.
Com essas ferramentas, você tem total liberdade para modificar, expandir e personalizar sua experiência no servidor.
