waaaa 发表于 2024-4-9 18:14:59

翻译

-- colours that determine the success level
colours =
{
    ERROR = { 238, 167, 74 },
    SUCCESS = { 114, 210, 80 }
}

distances = {
    close = {
      shortname = "C",
      name = "CLOSE",
      distance = 15
    },

    med = {
      shortname = "M",
      name = "MEDIUM",
      distance = 200
    },

    far = {
      shortname = "F",
      name = "FAR",
      distance = 10000
    }
}

RegisterCommand('hlrange', function(source, args)
    if not IsPlayerAceAllowed(source, "hlabels.hlrange") then
      return TriggerClientEvent("chat:addMessage", source, {
            args = { "Head Labels", "You do not have permission to execute this command (hlrange)." },
            color = colours.ERROR
      })
    end

    if #args < 1 then
      return TriggerClientEvent('chat:addMessage', source, {
            args = { "Head Labels", "Invalid amount of arguments provided." },
            color = colours.ERROR
      })
    end

    local foundRange
    for k, v in pairs(distances) do
      if v["shortname"]:lower() == args:lower() then
            foundRange = v
            break
      end
    end

    if not foundRange then
      return TriggerClientEvent("chat:addMessage", source, {
            args = { "Head Labels", "Unknown distance provided." },
            color = colours.ERROR
      })
    end

    TriggerClientEvent("setHeadLabelDistance", source, foundRange.distance)
    TriggerClientEvent("chat:addMessage", source, {
      args = { "Head Labels", "You have set your head label display range to: [ " .. foundRange.name:upper() .. " ]." },
      color = colours.SUCCESS
    })
end, false)

RegisterNetEvent("onClientHeadLabelRangeChange")
AddEventHandler("onClientHeadLabelRangeChange", function(change)
    local source = source
    -- ok, this is bad!
    if not IsPlayerAceAllowed(source, "hlabels.hlrange") then
      local thisResourceName = {
            DROP = GetCurrentResourceName() .. " (hlabels)",
            CONSOLE = "^7[^4" .. GetCurrentResourceName() .. "^7]"
      }
      local message = "Detected an unauthorized altercation of"
      print("^1(ALERT) " .. thisResourceName.CONSOLE .. ": ^3" .. message .. " player [ " .. GetPlayerName(source) .. " | " .. source .. " ] head label range. ^1Dropping the " ..
            "player from the server now.^7")
      DropPlayer(source, "Dropped as a protection of the " .. thisResourceName.DROP .. " resource. " .. message .. " your head label range.")
    end
end)








ESX = exports["es_extended"]:getSharedObject()
local Users = {}

ESX.RegisterServerCallback('hlabels:get', function(source, cb)
    local xPlayers = ESX.GetPlayers()
    Users = {}
    for i=1, #xPlayers, 1 do
      local xPlayer = ESX.GetPlayerFromId(xPlayers)
      if xPlayer then
            table.insert(Users, {
                source = xPlayer.source,
                name = xPlayer.name,
                job_name = xPlayer.getJob().label..'-'..xPlayer.getJob().grade_label,
            })
      end
    end
    TriggerClientEvent('hlabels:name', -1, Users)
    cb(Users)
end)

function load()
    Wait(1000)
    local xPlayers = ESX.GetPlayers()
    Users = {}
    for i=1, #xPlayers, 1 do
      local xPlayer = ESX.GetPlayerFromId(xPlayers)
      if xPlayer then
            table.insert(Users, {
                source = xPlayer.source,
                name = xPlayer.name,
                job_name = xPlayer.getJob().label..'-'..xPlayer.getJob().grade_label,
                job_code = xPlayer.job.name
            })
      end
    end
    TriggerClientEvent('hlabels:name', -1, Users)
end

Citizen.CreateThread(function()
    while true do
      Citizen.Wait(Config.updateTime)
      load()
    end
end)

ChatGPT 发表于 2024-4-9 18:33:12

-- 确定成功级别的颜色
colours =
{
    ERROR = { 238, 167, 74 }, -- 错误颜色
    SUCCESS = { 114, 210, 80 } -- 成功颜色
}

-- 距离参数
distances = {
    close = {
      shortname = "C", -- 缩写
      name = "CLOSE", -- 名称
      distance = 15 -- 距离
    },

    med = {
      shortname = "M", -- 缩写
      name = "MEDIUM", -- 名称
      distance = 200 -- 距离
    },

    far = {
      shortname = "F", -- 缩写
      name = "FAR", -- 名称
      distance = 10000 -- 距离
    }
}

-- 注册命令,设置头顶标签显示范围
RegisterCommand('hlrange', function(source, args)
    if not IsPlayerAceAllowed(source, "hlabels.hlrange") then
      return TriggerClientEvent("chat:addMessage", source, {
            args = { "头顶标签", "您没有权限执行此命令 (hlrange)." }, -- 提示消息
            color = colours.ERROR -- 错误颜色
      })
    end

    if #args < 1 then
      return TriggerClientEvent('chat:addMessage', source, {
            args = { "头顶标签", "提供的参数数量无效." }, -- 提示消息
            color = colours.ERROR -- 错误颜色
      })
    end

    local foundRange
    for k, v in pairs(distances) do
      if v.name:lower() == args:lower() then
            foundRange = v
            break
      end
    end

    if not foundRange then
      return TriggerClientEvent("chat:addMessage", source, {
            args = { "头顶标签", "提供的距离参数无效." }, -- 提示消息
            color = colours.ERROR -- 错误颜色
      })
    end

    TriggerClientEvent("setHeadLabelDistance", source, foundRange.distance)
    TriggerClientEvent("chat:addMessage", source, {
      args = { "头顶标签", "您已将头顶标签显示范围设置为: " .. foundRange.name .. "." }, -- 提示消息
      color = colours.SUCCESS -- 成功颜色
    })
end, false) -- 此代码放在服务器脚本文件中

-- 当客户端头顶标签范围改变时触发的事件
RegisterNetEvent("onClientHeadLabelRangeChange")
AddEventHandler("onClientHeadLabelRangeChange", function(change)
    local source = source
    -- 检查是否有权限执行该操作
    if not IsPlayerAceAllowed(source, "hlabels.hlrange") then
      local thisResourceName = {
            DROP = GetCurrentResourceName() .. " (hlabels)", -- 获取当前资源名称
            CONSOLE = "^7" -- 控制台消息颜色
      }
      local message = "检测到未经授权的操作"
      print("^1(警告) " .. thisResourceName.CONSOLE .. ": ^3" .. message .. " 更改了玩家头顶标签范围. ^1将玩家从服务器中移除.^7")
      DropPlayer(source, "作为对 " .. thisResourceName.DROP .. " 资源的保护,您已被移除服务器. " .. message .. " 您的头顶标签范围已被更改.")
    end
end)

-- 导入 ESX 共享对象
ESX = exports:getSharedObject()
local Users = {}

-- 注册服务器回调函数,获取玩家信息
ESX.RegisterServerCallback('hlabels:get', function(source, cb)
    local xPlayers = ESX.GetPlayers()
    Users = {}
    for i=1, #xPlayers, 1 do
      local xPlayer = ESX.GetPlayerFromId(xPlayers)
      if xPlayer then
            table.insert(Users, {
                source = xPlayer.source,
                name = xPlayer.name,
                job_name = xPlayer.getJob().label..'-'..xPlayer.getJob().grade_label,
            })
      end
    end
    TriggerClientEvent('hlabels:name', -1, Users)
    cb(Users)
end)

-- 加载函数
function load()
    Wait(1000)
    local xPlayers = ESX.GetPlayers()
    Users = {}
    for i=1, #xPlayers, 1 do
      local xPlayer = ESX.GetPlayerFromId(xPlayers)
      if xPlayer then
            table.insert(Users, {
                source = xPlayer.source,
                name = xPlayer.name,
                job_name = xPlayer.getJob().label..'-'..xPlayer.getJob().grade_label,
                job_code = xPlayer.job.name
            })
      end
    end
    TriggerClientEvent('hlabels:name', -1, Users)
end

-- 创建一个循环线程,定期更新玩家信息
Citizen.CreateThread(function()
    while true do
      Citizen.Wait(Config.updateTime)
      load()
    end
end) -- 此代码放在服务器脚本文件中
页: [1]
查看完整版本: 翻译