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

# tackle

> Sistema de carrinho/derrubada (tackle): permite empurrar e derrubar outro jogador no chão, similar a um carrinho de futebol.

O **tackle** é um recurso de carrinho/derrubada. Quando o jogador está a pé e pulando, ao acionar a tecla de contexto ele executa um mergulho (ragdoll com queda). Enquanto em ragdoll, qualquer jogador que estiver encostando nele também é derrubado, cancelando ações de inventário de ambos.

## Funcionalidades

<CardGroup cols={2}>
  <Card title="Mergulho com ragdoll" icon="person-falling">
    A pé e pulando, a tecla de contexto aplica `SetPedToRagdollWithFall` no próprio jogador.
  </Card>

  <Card title="Derruba quem encosta" icon="users-slash">
    Em ragdoll, qualquer ped encostando no atacante também é derrubado.
  </Card>

  <Card title="Cancela inventário" icon="ban">
    Dispara `inventory:Cancel` para interromper ações de inventário de ambos os jogadores.
  </Card>

  <Card title="Filtro de alvos" icon="filter">
    Considera só peds encostando, fora de veículo e fora da animação de banho de sol.
  </Card>
</CardGroup>

***

## Fluxo

<Steps>
  <Step title="Atacante aciona o tackle">
    Uma thread no cliente detecta `IsPedJumping` + fora de veículo; ao soltar o controle `51` (E/contexto), aplica `SetPedToRagdollWithFall` em si.
  </Step>

  <Step title="Detecta jogadores próximos">
    Em ragdoll, percorre os próximos (`GetPlayers`) e dispara `tackle:Update` + `inventory:Cancel`.
  </Step>

  <Step title="Servidor valida o alvo">
    `tackle:Update` valida o alvo (`vRP.Passport`) e reenvia `tackle:Player` só a ele.
  </Step>

  <Step title="Alvo é derrubado">
    `tackle:Player` aplica ragdoll (5000ms) no alvo e cancela o inventário.
  </Step>
</Steps>

<Info>
  `GetPlayers` considera só peds **encostando** (`IsEntityTouchingEntity`), **fora de veículo** e **fora** da animação `amb@world_human_sunbathe@female@back@idle_a`.
</Info>

***

## Dependências

<CardGroup cols={3}>
  <Card title="vRP" icon="server">
    `vRP.Passport`
  </Card>

  <Card title="PolyZone" icon="draw-polygon">
    Zonas de detecção
  </Card>

  <Card title="inventory" icon="box">
    `inventory:Cancel`
  </Card>
</CardGroup>

***

## Comandos

Sem comando de chat. Acionado por **tecla**, controle `51` do grupo `1` (padrão **E** / contexto), apenas **pulando** e **fora de veículo**.

***

## Eventos

| Evento          | Lado     | Descrição                                                            |
| --------------- | -------- | -------------------------------------------------------------------- |
| `tackle:Update` | Servidor | Recebe o alvo, valida `Passport` e repassa `tackle:Player` só a ele. |
| `tackle:Player` | Cliente  | Aplica ragdoll/queda no alvo e cancela o inventário.                 |

<Note>Dispara o evento externo `inventory:Cancel` (cancela ações de inventário de ambos).</Note>

***

## Customização

Sem config. Ajustes no código:

* **Tecla:** `IsControlJustReleased(1,51)` (`client-side/core.lua`).
* **Duração/força:** `SetPedToRagdollWithFall` (atacante `2500,1500`; alvo `5000,5000`).
* **Condições de alvo:** filtros em `GetPlayers`.

<Tip>
  Ajuste os parâmetros de `SetPedToRagdollWithFall` para deixar o mergulho mais ou menos agressivo.
</Tip>
