Funções e Lógica do Servidor

Este arquivo é o núcleo da lógica do lado do servidor para o script. Ele é responsável por validar permissões, verificar as condições dos jogadores e gerenciar as regras necessárias para que uma animação em dupla possa ser executada com segurança e de forma interativa.
  📁 dk_animations_ext > config > server > functions.lua

Estrutura e Lógica

O script organiza a lógica em funções modulares que lidam com tarefas específicas, desde a checagem de permissões de administrador até a validação das condições em tempo real para executar uma animação.

Funções de Validação e Permissão

  • isAdmin(source): Uma função interna que verifica se um jogador tem status de administrador. Ela se integra ao framework do servidor (via export dk_snippets) para obter essa informação.
  • GetPeds(source, target): Garante que as entidades dos jogadores (peds) de origem e alvo existam no mundo do jogo antes de prosseguir, prevenindo erros.
  • Config.serverFuncs.managePedsPermission(source): Define a regra de permissão para comandos administrativos, reutilizando a função isAdmin para conceder ou negar acesso.

Lógica Principal da Animação

A função Config.serverFuncs.canPlayAnim é o principal ponto de verificação e contém várias regras:
  1. Validade dos Peds: Confere se ambos os jogadores são válidos.
  2. Vida do Jogador: Impede a execução se o jogador estiver incapacitado (com vida baixa).
  3. Sistema de Convite: Se a animação for configurada com request = true, ela envia um convite ao jogador alvo. A animação só prossegue se o convite for aceito.
  4. Verificação de Distância: Garante que os jogadores estejam próximos o suficiente para que a animação sincronizada funcione corretamente.
  5. Feedback ao Jogador: Envia notificações para informar o status da solicitação (enviada, recusada, aceita, muito longe).
O sistema de convite, implementado com a função Request, é crucial para a interatividade. Ele dá ao jogador alvo o poder de aceitar ou recusar uma animação, promovendo interações consensuais e prevenindo spam ou abuso da mecânica.

Código Fonte Completo

dk_animations_ext/config/server/functions.lua
Config.serverFuncs = {}

CreateThread(function()
    _, FW = exports["dk_snippets"]:framework()
end)

---Retorna true se o player for admin.
---@param source integer
---@return boolean
local function isAdmin(source)
    local player = FW.getPlayer(source)
    return player.isAdmin()
end

---Pegar os peds baseado nas sources
---@param source integer
---@param target integer
---@return integer|nil
---@return integer|nil
function GetPeds(source, target)
    local myPed = GetPlayerPed(source)
    local targetPed = GetPlayerPed(target)

    if not DoesEntityExist(myPed) or not DoesEntityExist(targetPed) then
        print("erro ao executar anim: ped inexistente ", myPed, targetPed)
        return nil, nil
    end

    return myPed, targetPed
end

---Verifica se o player pode executar determinada animação
---@param source integer
---@param target integer
---@param animConfig table
---@return boolean
function Config.serverFuncs.canPlayAnim(source, target, animConfig)
    local myPed, targetPed = GetPeds(source, target)

    if not myPed or not targetPed then
        return false
    end

    if GetEntityHealth(myPed) <= 101 then
        return false
    end

    Notification(source, "green", Locale("sent_anim"), 3000)

    if animConfig.request and not Request(target, Locale("request_anim", {animConfig.command}), 20) then
        Notification(source, "red", Locale("refused_anim"), 3000)
        return false
    end

    local myCoords = GetEntityCoords(myPed)
    local targetCoords = GetEntityCoords(targetPed)
    if #(myCoords - targetCoords) > 3 then
        Notification(source, "red", Locale("too_far"), 3000)
        return false
    end

    Notification(source, "green", Locale("accepted_by_user"), 3000)

    return true
end

---Permissão para gerenciar as idades dos peds.
---@param source integer
---@return boolean
function Config.serverFuncs.managePedsPermission(source)
    return isAdmin(source)
end

🔔 Resumo:
  • Este arquivo centraliza a lógica de validação do lado do servidor.
  • A função canPlayAnim é a principal e executa múltiplas verificações: vida, consentimento do alvo e distância.
  • A verificação de permissão (managePedsPermission) é modular e restringe o acesso a comandos administrativos.
  • O script utiliza um sistema de convites para tornar as interações entre jogadores mais dinâmicas e consensuais.