Otros recursos pueden reproducir y cancelar emotes, bloquear al jugador, cambiar el estilo de caminar y consultar qué está haciendo. Lo que no aparece en esta página es interno.
Todos los exports de cliente actúan sobre el jugador local, salvo que se indique lo contrario.
Exports de cliente
Reproducir y cancelar
| Export | Parámetros | Devuelve | Qué hace |
|---|---|---|---|
PlayEmoteByCommand | command: string, variant?: number | boolean | Reproduce un emote, escenario, estilo de caminar o expresión por su comando. Devuelve false si el comando no existe, el jugador está bloqueado o el cooldown sigue activo. |
StartAnimationPlay | command: string, variant?: number | — | Igual que el anterior, sin valor de retorno. |
PlayEmote | data: table, variation?: number | boolean | Reproduce un emote a partir de su tabla de datos, tal como la devuelve findEmoteByCommand. |
playScenario | name: string | — | Inicia un escenario de GTA en el sitio. No hace nada dentro de un vehículo ni con el jugador bloqueado. |
CancelEmote | skipReset?: boolean | — | Cancela el emote actual. Si hay un emote de torso superpuesto, solo cancela ese. Con true lo corta todo al momento, se salta la animación de salida y funciona aunque el jugador esté bloqueado. |
StopAnimation | skipReset?: boolean | — | Alias de CancelEmote. |
CancelUpperLayer | — | — | Cancela solo la animación de torso superpuesta a otro emote. |
CancelAllAnimations | — | — | Limpia los emotes y los estados de movimiento (manos arriba, brazos cruzados, señalar, tumbado). No hace nada con el jugador bloqueado. |
PlayAnimOnNPC | command: string, ped: number | — | Reproduce un emote o un escenario del catálogo en otro ped. |
local played = exports.cuxial_emotes:PlayEmoteByCommand('adjust')
if not played then
print('No se pudo reproducir el emote')
end
-- más tarde
exports.cuxial_emotes:CancelEmote()Bloqueo y estado
| Export | Parámetros | Devuelve | Qué hace |
|---|---|---|---|
SetEmoteLock | locked: boolean, reason?: string | — | Bloquea o suelta al jugador para el recurso que llama y ese motivo ('default' si no se indica). Consulta Bloqueo de animaciones. |
IsEmoteLocked | — | boolean | Si hay algún bloqueo activo. |
GetEmoteLocks | — | table | Bloqueos activos por recurso: { [recurso] = { motivo, ... } }. |
SetCanPlayAnimation | value: boolean | — | Permite o impide iniciar emotes. |
CanPlayAnimation | — | boolean | Si se pueden iniciar emotes. |
SetCanCancelAnimation | value: boolean | — | Permite o impide cancelar el emote actual. |
SetAnimationPlaying | value: boolean | — | Fuerza el indicador de «hay un emote en curso». |
IsPlayingAnimation | — | boolean | Si hay un emote en curso. |
isPlayerDead | — | boolean | Si el script considera muerto al jugador, según deadCheck. |
GetBaseLayer | — | table | nil | Emote actual: { data, variation, dict, anim }. |
GetUpperLayer | — | table | nil | Emote de torso actual, con la misma forma. |
HasUpperLayer | — | boolean | Si hay un emote de torso superpuesto. |
Bloqueo de animaciones
Un bloqueo mantiene al jugador quieto en una escena de tu recurso. Mientras haya alguno activo, el jugador no puede lanzar ni cancelar emotes (comandos, atajos, menú y emotes compartidos), levantar las manos, cruzar los brazos, señalar, hacer ragdoll, tumbarse ni agacharse, y recibe un aviso breve si lo intenta. Al empezar el bloqueo se suelta lo que estuviera haciendo.
Cada bloqueo pertenece al recurso que lo pone y a un motivo, así que varios recursos y escenas pueden bloquear a la vez. El jugador vuelve a estar libre cuando se han soltado todos.
-- Mantener al jugador en una animación de tu script
exports.cuxial_emotes:SetEmoteLock(true, 'seat')
-- ... tu escena ...
exports.cuxial_emotes:SetEmoteLock(false, 'seat')
-- Quién bloquea al jugador ahora mismo
local locks = exports.cuxial_emotes:GetEmoteLocks() -- { mi_recurso = { 'seat' } }El estado del jugador animLock vale 'recurso:motivo' del primer bloqueo activo, o nil. Está replicado, así que el servidor y otros recursos pueden leerlo para no lanzar su propia animación encima. Los recursos que incluyen Cuxial Bridge pueden usar Bridge.Anim, que envuelve estos exports y vuelve a aplicar los bloqueos si Cuxial Emotes se reinicia.
Libera siempre el bloqueo que pongas, con el mismo motivo. Un jugador bloqueado no puede usar ningún emote hasta que se suelte. Los bloqueos también se sueltan cuando se detiene el recurso que los puso.
Catálogo
| Export | Parámetros | Devuelve | Qué hace |
|---|---|---|---|
findEmoteByCommand | command: string | table | nil, string | nil | Datos del emote y su tipo: 'emote', 'scenario', 'walk' o 'expression'. |
buildAnimationsList | — | table[] | La lista que muestra el menú. Cada entrada tiene name, title, description, category y liked. Los emotes llevan además isSynced, icon, tags y added. |
GetAnimationFromSet | setIndex: number, animIndex: number | string | nil | Comando guardado en un hueco de un set rápido. |
buildPropsFromData | props: table, variation?: number | table[] | Convierte los Options.Props de un emote en entradas { hash, bone, placement, variant }. |
CleanAllPedProps | — | — | Quita los props de emote que lleva el jugador. |
local emote, kind = exports.cuxial_emotes:findEmoteByCommand('atm')
if emote then
print(emote.Label, kind)
endEstilo de caminar, expresión y apuntado
| Export | Parámetros | Devuelve | Qué hace |
|---|---|---|---|
SetWalk | clipset: string, skipSave?: boolean | — | Aplica un clipset de movimiento, como 'move_m@brave', y lo pone en el estado walkstyle. Con skipSave no se guarda para la siguiente sesión. |
ResetWalk | — | — | Vuelve a la forma de caminar por defecto y limpia el estado walkstyle. |
RestoreLastWalkStyle | — | — | Vuelve a aplicar el clipset del estado walkstyle, o la forma de caminar por defecto si no hay ninguno. |
SetExpression | name: string, skipSave?: boolean | — | Aplica una expresión facial, como 'mood_angry_1'. Con skipSave no se guarda para la siguiente sesión. |
ResetExpression | — | — | Vuelve a la expresión por defecto. |
SetWeaponAnimation | dict?: string, name?: string | — | Establece la animación que se reproduce al apuntar con un arma de data/weapons.lua. Llámalo sin argumentos para quitarla. |
GetWeaponAnimation | — | string | nil, string | nil | Diccionario y clip de apuntado actuales. |
-- Tu script ha cambiado el clipset de movimiento con natives para un efecto.
-- Al terminar, devuelve al jugador su estilo de caminar.
exports.cuxial_emotes:RestoreLastWalkStyle()Movimiento
| Export | Parámetros | Devuelve | Qué hace |
|---|---|---|---|
IsPlayerCrouched | — | boolean | nil | Agachado. |
IsPlayerProne | — | boolean | Tumbado. |
IsPlayerCrawling | — | boolean | Arrastrándose. |
IsHandUp | — | boolean | Manos arriba. |
IsPointing | — | boolean | Señalando. |
IsCrossArms | — | boolean | Brazos cruzados. |
IsInRagdoll | — | boolean | En ragdoll provocado por el script. |
SetPlayerCrouch | value: boolean | — | Fuerza agacharse o levantarse. |
SetHandsUp | value: boolean | — | Fuerza subir o bajar las manos. |
if exports.cuxial_emotes:IsHandUp() then
-- el jugador se está rindiendo
endEditor de posición, modo foto y zonas
| Export | Parámetros | Devuelve | Qué hace |
|---|---|---|---|
GetLockedEditPosition | — | table | nil | Posición fijada con el editor de posición: { x, y, z, heading }. |
UnlockEditedPosition | — | — | Libera esa posición. |
IsPhotoModeActive | — | boolean | Si el modo foto está abierto. |
IsCameraActive | — | boolean | Si la cámara libre está en uso. |
GetActiveZones | — | string[] | Nombres internos de las zonas de emotes en las que está el jugador, con la forma cuxial_zone_<id>. |
IsInZone | zoneName: string | boolean | Si el jugador está dentro de la zona con ese nombre interno. |
GetActiveZoneCategories | — | string[] | Nombres de las categorías de zona disponibles en el menú en este momento. |
if exports.cuxial_emotes:IsPhotoModeActive() then return endExports de servidor
ForcePlaySyncedEmote
Inicia un emote en pareja entre dos jugadores sin pedir confirmación.
exports.cuxial_emotes:ForcePlaySyncedEmote(requesterId, responderId, senderCommand)| Parámetro | Tipo | Descripción |
|---|---|---|
requesterId | number | Id de servidor del jugador que hace senderCommand. |
responderId | number | Id de servidor del otro jugador. |
senderCommand | string | Comando de un emote sincronizado. |
Devuelve boolean: true si el emote ha empezado. Falla si alguno de los dos no está conectado, si los dos ids son el mismo, si el comando no es un emote sincronizado con un OtherEmote válido o si los jugadores están más lejos que sync.distance.
local started = exports.cuxial_emotes:ForcePlaySyncedEmote(source, targetId, 'rasurar')Exports de ítems
condom_closed, condom_open, pregnancy_test y hiv_test son enganches de ítem para ox_inventory. Están pensados para referenciarse desde la definición del ítem, no para llamarlos a mano. Mira Instalación.
Eventos
cuxial_emotes:OpenMenu
Cliente, local. Abre el menú de emotes. Útil desde un menú radial.
TriggerEvent('cuxial_emotes:OpenMenu')cuxial_emotes:PlayQuickAnim
Cliente, evento de red. Reproduce un hueco del set rápido activo. El hueco va en el segundo argumento, con la forma que usan los menús radiales.
TriggerEvent('cuxial_emotes:PlayQuickAnim', nil, { id = 1 })cuxial_emotes:ChangeSet
Cliente, evento de red. Cambia el set rápido activo.
TriggerEvent('cuxial_emotes:ChangeSet', nil, { id = 2 })Los dos eventos de sets rápidos solo existen cuando emotes.quickAnims es true.
cuxial_emotes:server:syncedEmoteStarted
Servidor, local. Se dispara cada vez que empieza un emote en pareja.
AddEventHandler('cuxial_emotes:server:syncedEmoteStarted', function(requesterId, responderId, command)
print(('%s y %s empezaron %s'):format(requesterId, responderId, command))
end)Estados del jugador
El script escribe estos state bags en el jugador. Se pueden leer desde cualquier recurso.
| Clave | Replicado | Valor |
|---|---|---|
isInEmote | Sí | true mientras hay un emote en curso. |
inSynchronizedEmote | Sí | Id de servidor de la pareja durante un emote en pareja. |
walkstyle | Sí | Clipset de movimiento actual. |
expression | Sí | Expresión facial actual. |
handsUp | Sí | true con las manos arriba. |
emoteProps, emotePropsUpper | Sí | Props del emote actual. |
crouch | No, solo local | true mientras está agachado. |
animLock | Sí | 'recurso:motivo' del primer bloqueo de animaciones activo, o nil. Lo escribe el cliente: úsalo para impedir acciones, nunca para concederlas. |
-- lado servidor
if Player(source).state.handsUp then
-- permitir el cacheo
endEl script también lee dos estados que ponen otros recursos:
| Clave | Efecto |
|---|---|
dead | El jugador cuenta como muerto cuando deadCheck.useStateBag es true. |
isLimited | Mientras está puesto, el jugador no puede iniciar emotes. |
