> For the complete documentation index, see [llms.txt](https://docs.snt.gg/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.snt.gg/resources/snt-animations.md).

# snt-animations

***

## Executando animações

```lua
TriggerClientEvent('snt/animations/play',source,animationData)
```

> O parâmetro **animationData** deve ser uma tabela, com os dados da animação a ser executada,\
> no formato abaixo:

```lua
animationData = {
    dict = "mp_player_intdrink", 
    anim = "loop_bottle",
    walk = true,
    loop = true,
    -- opcionais \/
    clearBefore = true, -- (limpar a animação atual antes)
    prop = "prop_ld_flow_bottle",
    bone = 60309,
    prop_placement = {0.0,0.0,0.02,0.0,0.0,130.0},
    extraProps = { -- props adicionais
        { 
            prop = 'extra_prop',
            bone = 60309, 
            prop_placement = {0.0,0.0,0.0,0.0,0.0,0.0}
        }
    },
}
```

***

## Cancelando/parando animações

```lua
TriggerClientEvent('snt/animations/stop',source)
```

***

## Bloqueando o uso de animações

```lua
TriggerClientEvent('snt/animations/setBlocked',source,isBlocked)
-- isBlocked : boolean : true (bloqueado/travado), false (desbloqueado/destravado)
```

> Quando um jogador está com as animações bloqueadas, ele não poderá:
>
> * realizar novas animações
> * acessar o menu de animações
> * cancelar animações em andamento

Também é possível bloquear o uso do snt-animations através do uso dos **StateBags `animBlocked` e** `animationsDisabled`.

```lua
-- #### server
Player(source).state:set('animBlocked',true,true)
-- ou
Player(source).state:set('animationsDisabled',true,true)

-- #### client
LocalPlayer.state:set('animBlocked',true)
-- ou
LocalPlayer.state:set('animationsDisabled',true)
```

```lua
-- server
Player(source).state:set('animBlocked',true,true)

-- client
LocalPlayer.state:set('animBlocked',true)
```

***

## Inserindo novas animações no menu

{% hint style="info" %}
o export **insertAnimation** deve ser utilizado **exclusivamente** no **client** (ex snt-animations/src/custom.lua).
{% endhint %}

```lua
exports['snt-animations']:insertAnimation(category, name, animationData)
```

> **category**
>
> ID da categoria onde a animação inserida será exibida.
>
> <sub>Categorias pré-existentes:</sub> <sub></sub><sub><kbd>others<kbd></sub><sub>,</sub> <sub></sub><sub><kbd>physical<kbd></sub><sub>,</sub> <sub></sub><sub><kbd>dances<kbd></sub><sub>,</sub> <sub></sub><sub><kbd>trend<kbd></sub><sub>,</sub> <sub></sub><sub><kbd>poses<kbd></sub><sub>,</sub> <sub></sub><sub><kbd>objects<kbd></sub><sub>,</sub> <sub></sub><sub><kbd>services<kbd></sub><sub>.</sub>

{% hint style="info" %}
Também é possível utilizar *categorias custom*, assim como personalizar a exibição destas categorias no menu, utilizando o export <kbd>registerCategory</kbd>, vide código abaixo!
{% endhint %}

```lua
exports['snt-animations']:registerCategory(category, name, icon)
-- category : string : id da categoria conforme utilizado em insertAnimation.
-- name : string : nome da categoria para exibição no menu
-- icon : string : nome da imagem que deve ser um SVG dentro da pasta web/img
-- ex: 'iconName', logo dentro de web/img você deve adicionar iconName.svg
```

> **name**\
> nome da animação, será exibido no menu e também será utilizado no comando /e \<nome>.

> animationData\
> dados da animação, no formato abaixo:

```lua
animationData = {
    dict = "mp_player_intdrink", 
    anim = "loop_bottle",
    walk = true,
    loop = true,
    -- opcionais \/
    clearBefore = true, -- (limpar a animação atual antes)
    prop = "prop_ld_flow_bottle",
    bone = 60309,
    prop_placement = {0.0,0.0,0.02,0.0,0.0,130.0},
    vehicle_allowed = false, -- Se pode ser feita em veículos (true) ou não (false/padrão).
    extraProps = { -- props adicionais
        { 
            prop = 'extra_prop',
            bone = 60309, 
            prop_placement = {0.0,0.0,0.0,0.0,0.0,0.0}
        }
    },
    vehicle_allowed = false, -- se pode ser executada em veículos ou não (true | false)
    only_on_vehicle = true, -- a animação só poderá ser executada em veículos
    vehicle_seats = {-1, 0, 1, 2}, -- assentos em que a animação poderá ser realizada 
    -- lembrando que: -1 = p1, 0 = p2, 1 = p3, 2 = p4.
    description = 'Descrição opcional para a animação bla bla bla ...', -- descrição
}
```

> **exemplo de utilização:**

{% code title="client.lua" %}

```lua
CreateThread(function()

    while type(insertAnimation) ~= 'function' do
        Wait(500)
    end
    
    Wait(1000)
    
    insertAnimation(
        'poses',
        'curioso',
        { 
            dict = 'anim@amb@board_room@whiteboard@', 
            anim = 'curious_01_amy_skater_01', 
            walk = false, 
            loop = true 
        }
    )
    
end)
```

{% endcode %}

## Inserindo animações em duplas

É possível também adicionar animações em dupla no menu, onde é necessário inserir a animação (com mesmo nome) nas categorias `couple` e `couple:sync`, vide exemplo abaixo.

<pre class="language-lua" data-title="client.lua"><code class="lang-lua">CreateThread(function()

    while type(insertAnimation) ~= 'function' do
        Wait(500)
    end
    
    Wait(1000)

    local animationDataP1 = {
        dict = 'mp_ped_interaction',
        anim = 'kisses_guy_a',
        walk = false,
        duration = 5000, -- se não houver duração, adicionar loop = true no lugar.
        syncOptions = {
            syncOffset = { front =  1.05 }
        }
    }
    
    local animationDataP2 = {
<strong>        dict = 'mp_ped_interaction',
</strong>        anim = 'kisses_guy_b',
        walk = false,
        duration = 5000, -- se não houver duração, adicionar loop = true no lugar.
        syncOptions = {
            syncOffset = { front =  1.18 }
        },
        carryTask = false -- se é uma animação de carregar ou não, pra caso um dos dois pare de fazer ela ser forçada de volta (ex ao passar em portas).
    }
    
    insertAnimation('couple','abracar',animationDataP1)
    insertAnimation('couple:sync','abracar',animationDataP2)
    
end)


######################################################
## Demais opções da configuração syncOptions, no animation data de animações em duplas:

-- Ajustar a coordenada do ped (front = ajuste frontal, side = ajuste lateral):
syncOffset = { front = 1.0, side = 0.0 }, 

-- Travar a posição do ped:
freezePos = true,

<strong>-- Dar attach no ped 2 no ped 1 (grudar peds/carregar)
</strong>attachTo = { bone = 0, xPos = 0.1400, yPos = 0.2500, zPos = 0.0000, xRot = 0.0000, yRot = 0.0000, zRot = 0.0000 },

</code></pre>

***

## Objetos utilizados

Abaixo, confira todos os objetos utilizados pelas animações do snt-animations, caso precise para liberar em alguma proteção ou anti-cheat.

{% code title="animations objects" %}

```lua
--// LISTA DE OBJETOS USADOS PELAS ANIMAÇÕES 
--// index = hash

imp_prop_impexp_front_bumper_02a    = -648059247
prop_snow_flower_02                 = -1676901836
prideflag8                          = 609415592
prop_ld_case_01                     = 880595258
ringcase                            = 2106079029
prop_cs_tablet                      = -1585232418
prop_amb_phone                      = 974883178
ch_prop_ch_security_case_01a        = 450899411
prop_wheel_tyre                     = -1570565546
basket1                             = 102484672
prop_novel_01                       = 944959446
prop_fish_slice_01                  = -2013814998
prideflag4                          = 1326860090
w_am_digiscanner                    = 520317490
prop_car_battery_01                 = 1158698200
prop_cs_shopping_bag                = -1187210516
prop_tourist_map_01                 = -645296272
prop_beggers_sign_03                = -1109340972
prop_binoc_01                       = 985101275
prop_suitcase_01c                   = -214655688
prideflag2                          = -1622284384
vw_prop_casino_shopping_bag_01a     = -1255458329
prop_single_rose                    = 76092178
basket2                             = -136958411
ch_prop_ch_trolly_01a               = 657513877
p_amb_brolly_01                     = -781595832
prop_tool_box_04                    = -1972842851
prop_car_door_03                    = 674546851
prop_v_cam_01                       = -206866686
p_amb_brolly_01_s                   = 1477930039
prop_bar_cockshaker                 = -420103132
v_ilev_mr_rasberryclean             = -1354005816
prop_mr_raspberry_01                = 1022578470
prop_notepad_01                     = 29402038
heartplush                          = -1406661507
prop_cs_walking_stick               = 1152510020
prop_cash_case_01                   = 1603932804
prop_bongos_01                      = 591916419
prideflag7                          = 1247624648
hei_prop_heist_box                  = -517243780
prop_shopping_bags02                = 1907480645
prop_pap_camera_01                  = 680380202
prideflag6                          = 983211587
p_amb_clipboard_01                  = -969349845
prop_megaphone_01                   = -1585551192
prop_beggers_sign_01                = -245386275
prop_cleaning_trolly                = -177104014
prop_ld_case_01_s                   = 248872646
prideflag3                          = 814877226
prop_roadcone02b                    = 1839621839
prop_car_seat                       = 1382419899
prop_car_door_04                    = -204842037
prop_car_door_02                    = -699424554
prop_security_case_01               = -1249748547
soro                                = 356243369
prop_rub_trolley03a                 = -1322592273
pridesign                           = 1363495735
prideflag9                          = -1247964097
w_am_case                           = -1400434704
prop_beggers_sign_04                = -801803927
prop_boombox_01                     = 1729911864
prop_cs_rub_binbag_01               = -675277761
prideflag1                          = 1695216411
prop_controller_01                  = -561798108
loveapple                           = -1137533694
wikitorch                           = 162539372
prop_car_door_01                    = 277255495
prideflag5                          = 1624468148
prop_curl_bar_01                    = -1555713785
stretcher                           = 836725157
wheelchair                          = -1178021069
prop_cs_police_torch_02             = 211760048
prop_food_cb_tray_03                = 754220966
prop_food_bs_tray_03                = 2014649636
defbag                              = -165324775
prop_poolskimmer                    = 1969778515
imp_prop_tool_box_01a               = 432993872
h4_prop_h4_champ_tray_01c           = 62973108
prop_el_guitar_03                   = 61087258
prop_el_guitar_02                   = 916292624
prop_tool_pickaxe                   = 260873931
prop_el_guitar_01                   = -1528307545
prop_fishing_rod_01                 = -1910604593
p_ing_microphonel_01                = -921000564
xm_prop_x17_bag_med_01a             = -502202673
prop_microphone_02                  = 933500565
prop_pizza_box_01                   = 604847691
prop_v_bmike_01                     = -290464389
prop_handrake                       = -447055518
prop_tool_hammer                    = -127739306
prop_tool_jackham                   = 1360563376
prop_food_cb_tray_02                = 1388727113
prop_tool_broom                     = -113902346
prop_leaf_blower_01                 = 1603835013
xraypaper                           = -1757565345
wateringcan                         = 1858950046
prop_tool_shovel                    = -531179099
paramedicbag                        = 1194586076
ba_prop_battle_headphones_dj        = -648546264
prop_acc_guitar_01                  = -708789241
p_cs_script_s                       = -1972099092
defprop                             = 1119655005
h4_mp_h_acc_drink_tray_02           = -1654747183
h4_prop_h4_champ_tray_01b           = -704214720
prop_parking_wand_01                = -839348691
prop_food_bs_tray_02                = -2040350273
prop_tool_shovel2                   = 2144550976

--// ADDON "WC26"

wc26_flag_ar                        = 353388307
wc26_flag_dz                        = -896621403
wc26_flag_au                        = 1187031667
wc26_flag_at                        = 914688508
wc26_flag_be                        = 1417820990
wc26_flag_ba                        = 789868643
wc26_flag_br                        = -503032248
wc26_flag_ca                        = 112500868
wc26_flag_cv                        = 1322856632
wc26_flag_co                        = -1677210860
wc26_flag_hr                        = -1286407510
wc26_flag_cw                        = 777449400
wc26_flag_cd                        = 1348580317
wc26_flag_cz                        = -1402770489
wc26_flag_ec                        = 423183169
wc26_flag_eg                        = 1465401242
wc26_flag_gb_eng                    = 1555807517
wc26_flag_fr                        = 1635572151
wc26_flag_de                        = 1475198921
wc26_flag_gh                        = -1709061176
wc26_flag_ht                        = -1798849132
wc26_flag_ir                        = -2049269478
wc26_flag_iq                        = 1974534343
wc26_flag_ci                        = 1688525923
wc26_flag_jp                        = 2127267512
wc26_flag_jo                        = -671598316
wc26_flag_ma                        = 594693687
wc26_flag_mx                        = -764498807
wc26_flag_nl                        = 2075690262
wc26_flag_nz                        = -1645753996
wc26_flag_no                        = 1126339563
wc26_flag_pa                        = 123584362
wc26_flag_py                        = 1952225638
wc26_flag_pt                        = -1559562562
wc26_flag_qa                        = -1141725347
wc26_flag_sa                        = -727954188
wc26_flag_gb_sct                    = 899855748
wc26_flag_sn                        = -1939227400
wc26_flag_za                        = -757743185
wc26_flag_kr                        = -1485022979
wc26_flag_es                        = 168240381
wc26_flag_se                        = -236648591
wc26_flag_ch                        = -2029706973
wc26_flag_tn                        = 209894396
wc26_flag_tr                        = -507779517
wc26_flag_us                        = -923094047
wc26_flag_uy                        = 2087492290
wc26_flag_uz                        = 805241320
wc26_mast                           = -1788327730
```

{% endcode %}

***
