Anim
Menu de animações com busca, favoritos, recentes, mais usadas e atalhos. Tem prévia no personagem, posicionar antes de tocar, animações em dupla e +18 com consentimento, música das danças para quem está perto, efeitos, jeito de andar, expressões e rastejar. Danças e animações extras entram por módulos.
Precisa de: ox_lib, oxmysql, krs_helper
Opcionais: kay_animshop (animações VIP pagas) e animals (animações do pet).
Instalação
Deixe as pastas assim:
[anim]/
anim/
[modules]/
anim_krs/ensure [modules]
ensure animColoque os dois depois do krs_helper, com os módulos antes do anim. As tabelas são criadas sozinhas. Veja a ordem completa.
Sem kay_animshop, todas as animações ficam liberadas e a categoria VIP não aparece no menu. As animações dela continuam tocando por /e.
Como usar
| Tecla | O que faz |
|---|---|
F4 | Abre o menu |
Alt esquerdo | Solta o mouse do menu para andar |
G | Solta o efeito da animação atual |
Ctrl direito | Rastejar |
Shift + teclado numérico | Toca o atalho salvo naquele número |
Page Up e Page Down | Velocidade da animação +18 |
Cada jogador pode trocar as teclas em Configurações > Teclas > FiveM.
| Comando | O que faz |
|---|---|
/emote <nome> | Toca uma animação |
/e <nome> | Atalho do /emote. /e c cancela |
/animpos | Ajuste fino da posição da animação atual |
/limparfavoritos | Apaga favoritos e atalhos do personagem |
/x <1 a 27> | Pede uma posição +18 ao parceiro |
/sincar <nome> | Alinha uma animação em dupla. Só para a equipe |
Se outro script já registrou o /e, o anim não cria o atalho e o /emote continua valendo.
Animações em dupla e +18 sempre pedem o aceite do parceiro.
Módulos
Um módulo é um resource separado que acrescenta animações ao catálogo. O anim procura ao iniciar qualquer resource que tenha a linha anim_module no manifest.
O anim_krs é o módulo de danças, com música e efeitos.
Instalar um módulo
- Solte a pasta do módulo em
[modules]. - Confira se
ensure [modules]vem antes deensure anim. - Reinicie o servidor.
Para atualizar, troque só a pasta do módulo. Atualizar o anim não mexe nos módulos. Para remover, apague a pasta e reinicie: as animações saem do menu.
Criar um módulo
-- fxmanifest.lua
fx_version "cerulean"
game "gta5"
lua54 "yes"
anim_module "config/anim.lua"
files {
"config/anim.lua",
"music/*.mp3"
}
escrow_ignore {
"config/anim.lua"
}O arquivo indicado precisa estar em files, porque o cliente também o lê. Se você usa escrow, ele precisa ficar em escrow_ignore.
O arquivo roda antes de o catálogo ser montado e acrescenta animações às tabelas de Config:
-- config/anim.lua
Config.Emotes["acenar2"] = { "meu@dict", "meu_clipe", "Acenar 2" }
Config.KrsDances = {
["minhadanca"] = { "meu@dict", "minha_danca", "Minha dança", animationOptions = {
musicURL = "nui://meu_modulo/music/minha_danca.mp3",
onlyOnFoot = true,
emoteLoop = true
} }
}| Tabela | Categoria no menu |
|---|---|
Config.Emotes | Gestos. Com música, vai para VIP |
Config.Dances | Danças. Com música, vai para VIP |
Config.KrsDances | KRS |
Config.Custom.Vip | VIP |
A primeira posição da entrada é o dicionário, a segunda é o clipe e a terceira é o nome no menu. O nome da chave é o que o jogador digita no /e.
A música precisa estar na pasta music/ do módulo, com o endereço nui://nome_do_modulo/music/arquivo.mp3. O nome do arquivo aceita letras, números, _ e -.
Permissão
Testes, Lixeira, /sincar e a varredura exigem o grupo de Config.DevGroup, que por padrão é Admin.
| Framework | Como liberar |
|---|---|
| krs, Creative | Grupo Admin do framework |
| vRP | Grupos god, admin ou mod |
| QBCore | add_principal identifier.license:SUA_LICENSE group.admin e add_ace group.admin admin allow |
| Sem framework | add_principal identifier.license:SUA_LICENSE group.admin e add_ace group.admin group.Admin allow |
Lixeira
A equipe tira uma animação do menu de todo mundo sem apagar arquivo.
- Abra o menu e passe o mouse no card.
- Clique na lixeira. A animação some do menu e do
/epara os jogadores. - Na categoria Lixeira, use Restaurar ou Excluir permanente.
Excluir permanente só marca a animação para sair na próxima limpeza dos arquivos. Até lá ainda dá para restaurar.
O botão Varrer testa as animações listadas numa cópia do seu personagem e manda para a lixeira as que não funcionam.
Configuração
Tudo fica em config.lua. Ele só precisa ter o que você mudou. Ao iniciar, o console avisa opção nova, nome errado e tipo errado.
| Opção | Padrão | O que muda |
|---|---|---|
Brand | "Kroma" | Marca no topo do menu |
Color | "#d8b86b" | Cor de destaque |
DevGroup | "Admin" | Grupo da equipe |
Keys | F4, RCONTROL, G, LMENU | Teclas padrão de Menu, Crawl, Effect e Mouse |
CloseMenuKeys | Escape, F4 | Teclas que fecham o menu, com o nome do navegador |
Commands.Emote | "e" | Atalho do /emote |
Commands.Place | "animpos" | Nome do /animpos |
Commands.ClearFavorites | "limparfavoritos" | Nome do /limparfavoritos |
Cooldown | 2000 | Espera entre animações por comando e atalho, em ms. O clique no menu troca na hora |
ArmedAllowed | true | false obriga a guardar a arma |
Crawl | true | Liga o rastejar |
NoInterior | sentar = true | Animações proibidas dentro de casas e prédios |
AnimationsBlacklistedInVehicles | vazio | Animações proibidas dentro de veículo |
NoDrive | "vehcar" | Trecho do nome das animações de carro que puxam o freio de mão enquanto o motorista toca |
Posicionar e ajuste fino:
| Opção | Padrão | O que muda |
|---|---|---|
Place.Distance | 20.0 | Distância máxima para posicionar, em metros |
Place.MaxHeight | 2.0 | Altura máxima, em metros |
Place.WalkTimeout | 20000 | Tempo para andar até o ponto, em ms |
AnimPos.Step | 0.1 | Passo por toque |
AnimPos.Turn | 2.0 | Giro por toque |
AnimPos.Pitch | 2.0 | Inclinação por toque |
AnimPos.MaxDistance | 5.0 | Distância máxima do personagem. O servidor confere |
Duplas e +18:
| Opção | Padrão | O que muda |
|---|---|---|
Pair.Distance | 2.5 | Distância para achar o parceiro |
Pair.ServerDistance | 3.0 | Distância que o servidor aceita |
Pair.SelectTimeout | 30000 | Tempo para escolher o parceiro, em ms |
Pair.RequestTimeout | 10000 | Tempo para responder ao pedido, em ms |
Pair.RefuseCooldown | 30 | Espera depois de uma recusa, em segundos |
Adult.Enabled | true | Liga o +18 |
Adult.Command | "x" | Nome do comando |
Adult.Distance | 1.5 | Distância do parceiro, em metros |
Adult.SpeedUp | "PAGEUP" | Tecla para acelerar |
Adult.SpeedDown | "PAGEDOWN" | Tecla para desacelerar |
Música e efeitos:
| Opção | Padrão | O que muda |
|---|---|---|
Music.Enabled | true | Liga a música das danças |
Music.MaxDistance | 5.0 | Distância em que se ouve, em metros |
Music.MaxDuration | 180 | Duração máxima, em segundos |
Music.Scope | 150.0 | Alcance do aviso aos outros jogadores, em metros |
Relay.Scope | 100.0 | Alcance do repasse de efeitos e pose, em metros |
Relay.PtfxPerSecond | 4 | Limite de efeitos por segundo, por jogador |
Relay.PosePerSecond | 2 | Limite de poses por segundo, por jogador |
Menu e prévia:
| Opção | Padrão | O que muda |
|---|---|---|
BasePreview.Enabled | true | Fantasma do personagem ao passar o mouse |
BasePreview.Distance | 2.5 | Distância do fantasma |
MenuCamera.Enabled | true | Câmera do menu |
MenuCamera.Fov | 40.0 | Zoom |
MenuCamera.Distance | 3.6 | Distância |
MenuCamera.Angle | 25.0 | Giro em volta do personagem, em graus |
MenuCamera.Height | 0.3 | Altura, em metros |
DefaultSettings | ver config.lua | Ajustes iniciais de cada jogador: lado do menu, volume, GIFs, repetição e música |
Os textos ficam em locales/*.json. As animações não ficam na config.
Para programadores
-- cliente: toca uma animação, sem cooldown
TriggerEvent("emotes", nome)
-- servidor: o mesmo para um jogador
TriggerClientEvent("emotes", source, nome)
-- cliente
exports.anim:BaseDestroy() -- cancela a animação atual
exports.anim:Details({ nome1, nome2 }) -- { [nome] = { Music, Effect, Prop, Moving, Loop } }
exports.anim:Showcase(nome, ms) -- prévia da loja, padrão 20000 ms
exports.anim:Dupla(nome, "requester", ped, outroPed) -- toca a metade de uma dupla nos peds dadosEstado: Player(source).state.Anim tem o nome da animação atual ou false. GlobalState.AnimTop tem as mais usadas.
Problemas comuns
[anim] módulo <nome> não carregou: <erro>: o arquivo do anim_module não foi encontrado ou tem erro de Lua. Confira o caminho no manifest e se o arquivo está em files.
O módulo não aparece no menu: confira se ensure [modules] vem antes de ensure anim e reinicie o servidor.
