mri-QboxResourcesmri_Qemotemenu

Manual do mri_Qemotemenu

Visão Geral

Sistema de emotes do servidor: catálogo completo de animações, menu em NUI com preview do personagem, atalhos nas setas e preferências salvas por personagem.

Nasceu como substituto do rpemotes-reborn. O catálogo de animações e os assets de stream são os mesmos, entrada por entrada — nenhum emote foi renomeado ou removido na migração, inclusive os que tinham nome divergente do que fazem.

Funcionalidades

  • Catálogo completo: emotes, danças, cenários, emotes com prop (incluindo variações de textura), emotes em dupla, emotes de animal, estilos de andar e expressões faciais.
  • Menu em NUI: busca que atravessa todas as categorias, favoritos marcáveis com estrela e um painel lateral com os atalhos.
  • Preview do personagem: ao passar o mouse por um emote, um clone do seu personagem executa a animação, com props e tudo. O clone é local — nenhum outro jogador enxerga.
  • Atalhos nas setas: quatro slots, um por seta. Cada jogador escolhe o emote de cada slot e pode dar um nome próprio ao atalho.
  • Padrões de servidor: administradores definem o emote inicial de cada seta para quem nunca personalizou.
  • Roda de emotes: seis slots equipáveis, usados pela roda do ox_lib no F1.
  • Apelidos: qualquer emote pode ser renomeado, e o nome novo vale só para quem renomeou.
  • Aviso de indisponível: emote cuja animação ou objeto não existe no cliente aparece marcado.

Como Funciona

Atalhos e precedência

Cada seta resolve o emote em três níveis, do mais forte para o mais fraco:

  1. O ajuste do jogador — o que ele escolheu no menu ou pelo /emotebind.
  2. O padrão do servidor — definido pelo administrador.
  3. O padrão do arquivoshared/config.lua, usado enquanto os dois acima não existirem.

Consequência prática: quando um administrador troca o padrão de uma seta, quem já personalizou aquele slot não sente diferença. A mudança só alcança quem estava no padrão.

Padrões de fábrica, herdados do rpemotes-reborn:

SetaEmote
Cimasalute
Baixoassobiar
Esquerdajoia
Direitawtf4

O atalho da direita se chama ultra_facepalm nas configurações de tecla do FiveM, mas executa wtf4. É uma divergência herdada, mantida de propósito para não mudar o comportamento de quem já jogava.

Por que as setas não atrapalham outros scripts

Antes, qualquer resource que usasse as setas precisava avisar o menu de emotes com DisableEmoteKeybinds(true) e lembrar de reverter com false. Quem esquecia deixava emotes disparando por cima do próprio menu — ou, pior, deixava os emotes mortos até o jogador reconectar.

O mri_Qemotemenu não tem esse export. Antes de executar um atalho, ele verifica sozinho:

SituaçãoResultado
Qualquer NUI com foco (chat, celular, MDT, menus do ox_lib, o próprio menu)não dispara
Menu de pausa ou aviso do jogo abertonão dispara
Outro resource desabilitou o controle daquela seta neste framenão dispara
LocalPlayer.state.canEmote está falsenão dispara
Jogador morto, algemado, em ragdoll, mirando, ou na águanão dispara

O terceiro item é o que faz o trabalho pesado: todo menu nativo desabilita as direcionais a cada frame para o jogador não sair andando enquanto navega. Isso já é sinal suficiente.

Se algum menu ler as setas sem desabilitar os controles, ele não é detectável. Nesse caso — e só nesse — use o statebag:

LocalPlayer.state:set('emoteBindsBlocked', true)  -- ao abrir
LocalPlayer.state:set('emoteBindsBlocked', false) -- ao fechar

Para descobrir por que uma seta não está respondendo, use /emoteguard: ele lista cada slot e o motivo do bloqueio.

Roda de emotes

O jogador equipa emotes pelo menu e usa pela roda do ox_lib, que neste servidor abre no F1.

Para equipar: abra o menu (F5), passe o mouse num emote e clique no +. Abre um seletor com os seis slots, mostrando o que já está em cada um. Clicar num slot ocupado substitui; clicar no slot que já tem aquele emote o remove.

Para usar: F1 → Emotes → o emote. A roda executa direto.

Dois limites que vêm do ox_lib e não de escolha nossa:

  • São seis slots. O PAGE_ITEMS da interface da roda é fixo em 6; do sétimo item em diante o último lugar vira um botão “mais” e come um slot.
  • Os emotes ficam um clique dentro da roda, no item Emotes, em vez de aparecerem direto ao abrir. Não existe forma de abrir um submenu do ox_lib programaticamente, e pôr os seis na raiz brigaria com os itens do qbx_radialmenu.

Os slots são salvos por personagem, junto com favoritos e atalhos.

Renomear emotes

O lápis em cada linha da lista dá um apelido pessoal ao emote — vale só para quem renomeou, e aparece na lista, na busca, nos atalhos de seta e na roda. O nome original continua visível entre parênteses. Deixar o campo vazio restaura.

Serve principalmente para arrumar os nomes herdados que não descrevem o emote.

Emotes indisponíveis

Um triângulo vermelho na linha significa que aquele emote não pode ser executado neste cliente: ou a animação não existe (arquivo ausente ou gamebuild antigo), ou o objeto que ele usa não existe. Passe o mouse na marca para ver qual dos dois.

A verificação roda uma vez, alguns segundos depois do resource subir, e cobre também as animações nativas do GTA. Emotes de cenário não têm como ser verificados e nunca aparecem marcados.

Configuração

Opções em shared/config.lua.

OpçãoPadrãoDescrição
DebugfalseLog detalhado no console.
MenuKeybindf5Tecla que abre o menu.
CancelEmoteKeyf6Tecla que cancela o emote.
PreviewPedtruePreview do personagem no menu.
PreviewMode'studio'Como o ped de preview é desenhado. Ver abaixo.
StudioCoordsinterior isoladoOnde o clone é posicionado no modo estúdio.
StudioCamLateral-0.4Empurra o ped para o lado do quadro, liberando a tela para a interface.
StudioForceDaytimetrueForça luz de dia no preview. É client-side e vale só enquanto o menu está aberto.
FreezePlayerWhileOpentrueCongela o personagem real enquanto o menu está aberto.
PreviewBlurtrueSó no modo world: desfoca o mundo atrás do ped.
FavoriteSlots4 setasSlots de atalho e seus padrões de fábrica.
InputGuardtodos ligadosLiga ou desliga cada sinal de detecção.
AdultEmotesDisabledfalseEsconde emotes marcados como adultos.
AnimalEmotesEnabledtrueEmotes de animal.
SharedEmotesEnabledtrueEmotes em dupla (/nearby).
AllowEmoteInVehicletruePermite emotes dentro de veículos.
AllowInWaterfalsePermite emotes na água.
CrouchEnabled / CrawlEnabledfalseDesligados: quem cuida disso é o crouch_crawl.
PointingEnabledtrueApontar o dedo, tecla B.
HandsupEnabledfalseMãos ao alto.
RagdollEnabledfalseRagdoll manual.
BinocularsEnabled / NewscamEnabledfalseBinóculos e câmera de reportagem.
SaveDebounce5000Milissegundos entre a última alteração e a gravação no banco.

Modos de preview

ModoComo funciona
studio (padrão)Um clone do personagem é levado para um ponto isolado e uma câmera própria o enquadra. Fundo limpo, iluminação previsível e o mesmo enquadramento sempre, de dia ou de madrugada.
worldO clone fica visível no mundo, reposicionado a cada frame na frente da câmera do jogo. Mais leve — não troca a câmera nem carrega área nova — mas pega a iluminação do lugar e pode encostar em parede ou carro.

Por que não existe modo “menu de pausa”

Uma versão anterior entregava o clone à scaleform do menu de pausa do jogo (GivePedToPauseMenu), que dá um enquadramento e uma iluminação muito bons. Ela não pode mostrar emote, e isso é uma limitação do próprio jogo, não um defeito de configuração: aquela scaleform desenha o ped mas ignora qualquer animação que a gente mande. A única que ela aceita é a de dormir, que é dela.

Foi confirmado por quatro caminhos: a documentação do native, dois relatos de quem tentou exatamente este caso de uso, e o nosso próprio diagnóstico in-game — o clone reportava estar tocando a animação enquanto a tela mostrava a pose dela.

Não vale tentar de novo. Se a intenção for um retrato parado do personagem, aí sim ela serve.

Calibrar o enquadramento

Com o menu aberto, sem reiniciar o resource:

ComandoEfeito
/emotepreviewDiagnóstico completo no console (F8).
/emotepreview mode <studio|world>Troca de modo na hora.
/emotepreview cam <x> <y> <z>Move a câmera em relação ao ped.
/emotepreview fov <n>Abre ou fecha o campo de visão.
/emotepreview lateral <n>Empurra o ped para o lado do quadro. Negativo vai para a direita.
/emotepreview rot <graus>Gira o ped.
/emotepreview tc <timecycle>Troca a iluminação. Sem argumento, limpa.
/emotepreview dofLiga/desliga o desfoque de profundidade.
/emotepreview daytimeLiga/desliga a luz de dia forçada.
/emotepreview replayReaplica o último emote pré-visualizado.
/emotepreview dumpImprime o bloco de config pronto para colar.

O fluxo é: ajustar olhando na tela, rodar dump, copiar do F8 e colar no shared/config.lua.

O diagnóstico é o que separa “a entidade sumiu” de “está viva e animando, mas não está sendo desenhada” — dois problemas que na tela parecem o mesmo.

Administração

A tela de padrões aparece como plugin dentro do mri_Qadmin, para quem tem a permissão emotes.manage. Também dá para usar comandos:

ComandoEfeito
/emotedefaultsLista os padrões atuais.
/emotedefault <slot> <emote>Define o padrão de um slot. Ex.: /emotedefault UP salute.

Banco de dados

TabelaConteúdo
mri_qemotemenu_playersAtalhos e preferências por citizenid.
mri_qemotemenu_defaultsPadrões de atalho do servidor.

Os padrões ficam em memória e só são relidos quando alguém os altera. As preferências de cada jogador são carregadas no login, mantidas em memória e gravadas em lote — trocar o emote de um atalho não gera consulta ao banco.

Solução de Problemas

  • Uma seta não executa o emote: rode /emoteguard. Ele diz qual sinal está bloqueando aquele slot.
  • Um emote não toca e aparece “não é um emote válido”: o nome está errado ou a animação exige um gamebuild mais novo. Confira com /emotes.
  • O prop de um emote não aparece: o .ytyp do pacote precisa estar declarado no fxmanifest.lua como DLC_ITYP_REQUEST.
  • O preview não mostra o personagem: verifique se Config.PreviewPed está true. Se um resource de HUD estiver forçando o menu de pausa, pode haver conflito.
  • Os atalhos voltaram ao padrão: confirme que o SQL de _INSTALL foi executado. Sem as tabelas, nada é salvo.
  • Outro script de emotes está instalado junto: só um pode estar ativo. Dois resources registrando /e e as mesmas teclas se atropelam.