waaaa 发表于 2024-4-1 13:19:22

翻译一下

local pickups = {}

Citizen.CreateThread(function()
        while not Config.Multichar do
                Citizen.Wait(0)
                if NetworkIsPlayerActive(PlayerId()) then
                        exports.spawnmanager:setAutoSpawn(false)
                        DoScreenFadeOut(0)
                        TriggerServerEvent('esx:onPlayerJoined')
                        break
                end
        end
end)

RegisterNetEvent('esx:playerLoaded')
AddEventHandler('esx:playerLoaded', function(xPlayer, isNew, skin)
        ESX.PlayerLoaded = true
        ESX.PlayerData = xPlayer

        FreezeEntityPosition(PlayerPedId(), true)

        if Config.Multichar then
                Citizen.Wait(3000)
        else
                exports.spawnmanager:spawnPlayer({
                        x = ESX.PlayerData.coords.x,
                        y = ESX.PlayerData.coords.y,
                        z = ESX.PlayerData.coords.z + 0.25,
                        heading = ESX.PlayerData.coords.heading,
                        model = `mp_m_freemode_01`,
                        skipFade = false
                }, function()
                        TriggerServerEvent('esx:onPlayerSpawn')
                        TriggerEvent('esx:onPlayerSpawn')
                        TriggerEvent('playerSpawned') -- compatibility with old scripts
                        TriggerEvent('esx:restoreLoadout')
                        if isNew then
                                if skin.sex == 0 then
                                        TriggerEvent('skinchanger:loadDefaultModel', true)
                                else
                                        TriggerEvent('skinchanger:loadDefaultModel', false)
                                end
                        elseif skin then TriggerEvent('skinchanger:loadSkin', skin) end
                        TriggerEvent('esx:loadingScreenOff')
                        ShutdownLoadingScreen()
                        ShutdownLoadingScreenNui()
                        FreezeEntityPosition(ESX.PlayerData.ped, false)
                end)
        end

        while ESX.PlayerData.ped == nil do Citizen.Wait(20) end
        -- enable PVP
        if Config.EnablePVP then
                SetCanAttackFriendly(ESX.PlayerData.ped, true, false)
                NetworkSetFriendlyFireOption(true)
        end

        if Config.EnableHud then
                for k,v in ipairs(ESX.PlayerData.accounts) do
                        local accountTpl = '<div> 360)then
                                        heading = 0
                                end

                                SetEntityHeading(ESX.PlayerData.ped, heading)
                        end

                        if(IsControlPressed(1, 9))then
                                heading = heading - 1.5
                                if(heading < 0)then
                                        heading = 360
                                end

                                SetEntityHeading(ESX.PlayerData.ped, heading)
                        end

                        if(IsControlPressed(1, 8))then
                                noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, 1.0, 0.0)
                        end

                        if(IsControlPressed(1, 32))then
                                noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, -1.0, 0.0)
                        end

                        if(IsControlPressed(1, 27))then
                                noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, 0.0, 1.0)
                        end

                        if(IsControlPressed(1, 173))then
                                noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, 0.0, -1.0)
                        end
                else
                        Citizen.Wait(200)
                end
        end
end)

RegisterNetEvent("esx:killPlayer")
AddEventHandler("esx:killPlayer", function()
SetEntityHealth(ESX.PlayerData.ped, 0)
end)

RegisterNetEvent("esx:freezePlayer")
AddEventHandler("esx:freezePlayer", function(input)
    local player = PlayerId()
    if input == 'freeze' then
      SetEntityCollision(ESX.PlayerData.ped, false)
      FreezeEntityPosition(ESX.PlayerData.ped, true)
      SetPlayerInvincible(player, true)
    elseif input == 'unfreeze' then
      SetEntityCollision(ESX.PlayerData.ped, true)
          FreezeEntityPosition(ESX.PlayerData.ped, false)
      SetPlayerInvincible(player, false)
    end
end)


ChatGPT 发表于 2024-4-1 13:19:52

local pickups = {} -- 声明一个空的表,用于存储拾取物品的数据

Citizen.CreateThread(function()
        while not Config.Multichar do -- 当Config.Multichar为false时执行以下代码
                Citizen.Wait(0) -- 等待一帧
                if NetworkIsPlayerActive(PlayerId()) then -- 如果本地玩家已激活
                        exports.spawnmanager:setAutoSpawn(false) -- 关闭自动重生
                        DoScreenFadeOut(0) -- 渐变屏幕消失
                        TriggerServerEvent('esx:onPlayerJoined') -- 触发服务器事件 'esx:onPlayerJoined'
                        break -- 跳出循环
                end
        end
end)

RegisterNetEvent('esx:playerLoaded') -- 注册一个网络事件 'esx:playerLoaded'
AddEventHandler('esx:playerLoaded', function(xPlayer, isNew, skin) -- 处理 'esx:playerLoaded' 事件
        ESX.PlayerLoaded = true -- 将ESX.PlayerLoaded设置为true
        ESX.PlayerData = xPlayer -- 将玩家数据保存到ESX.PlayerData中

        FreezeEntityPosition(PlayerPedId(), true) -- 冻结玩家角色位置

        if Config.Multichar then -- 如果Config.Multichar为true
                Citizen.Wait(3000) -- 等待3秒
        else
                exports.spawnmanager:spawnPlayer({ -- 生成玩家
                        x = ESX.PlayerData.coords.x,
                        y = ESX.PlayerData.coords.y,
                        z = ESX.PlayerData.coords.z + 0.25,
                        heading = ESX.PlayerData.coords.heading,
                        model = `mp_m_freemode_01`,
                        skipFade = false
                }, function()
                        TriggerServerEvent('esx:onPlayerSpawn') -- 触发服务器事件 'esx:onPlayerSpawn'
                        TriggerEvent('esx:onPlayerSpawn') -- 触发事件 'esx:onPlayerSpawn'
                        TriggerEvent('playerSpawned') -- 兼容旧脚本
                        TriggerEvent('esx:restoreLoadout') -- 触发事件 'esx:restoreLoadout'
                        if isNew then -- 如果isNew为true
                                if skin.sex == 0 then -- 如果角色是男性
                                        TriggerEvent('skinchanger:loadDefaultModel', true) -- 触发事件 'skinchanger:loadDefaultModel' 并传入参数true
                                else
                                        TriggerEvent('skinchanger:loadDefaultModel', false) -- 触发事件 'skinchanger:loadDefaultModel' 并传入参数false
                                end
                        elseif skin then TriggerEvent('skinchanger:loadSkin', skin) end -- 如果有skin数据,触发事件 'skinchanger:loadSkin' 并传入skin作为参数
                        TriggerEvent('esx:loadingScreenOff') -- 触发事件 'esx:loadingScreenOff'
                        ShutdownLoadingScreen() -- 关闭加载界面
                        ShutdownLoadingScreenNui() -- 关闭加载界面Nui
                        FreezeEntityPosition(ESX.PlayerData.ped, false) -- 解冻玩家角色位置
                end)
        end

        while ESX.PlayerData.ped == nil do Citizen.Wait(20) end -- 当ESX.PlayerData.ped为空时等待20毫秒

        -- 启用PVP
        if Config.EnablePVP then
                SetCanAttackFriendly(ESX.PlayerData.ped, true, false) -- 设置玩家可以攻击友方
                NetworkSetFriendlyFireOption(true) -- 设置网络友方火力为true
        end

        if Config.EnableHud then -- 如果Config.EnableHud为true
                for k,v in ipairs(ESX.PlayerData.accounts) do -- 遍历ESX.PlayerData.accounts表
                        local accountTpl = ' 360)then -- 自身行走
                                        heading = 0
                                end

                                SetEntityHeading(ESX.PlayerData.ped, heading) -- 设置玩家角色朝向
                        end

                        if(IsControlPressed(1, 9))then -- 如果按下F10键
                                heading = heading - 1.5 -- 将角度减少1.5
                                if(heading < 0)then -- 如果角度小于0
                                        heading = 360 -- 将角度设置为360
                                end

                                SetEntityHeading(ESX.PlayerData.ped, heading) -- 设置玩家角色朝向
                        end

                        -- 以下代码是一种无碰撞模式的示例
                        if(IsControlPressed(1, 8))then -- 如果按下Backspace键
                                noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, 1.0, 0.0) -- 获取距离玩家角色位置上方1个单位的坐标
                        end

                        if(IsControlPressed(1, 32))then -- 如果按下W键
                                noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, -1.0, 0.0) -- 获取距离玩家角色位置下方1个单位的坐标
                        end

                        if(IsControlPressed(1, 27))then -- 如果按下Up键
                                noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, 0.0, 1.0) -- 获取距离玩家角色位置前方1个单位的坐标
                        end

                        if(IsControlPressed(1, 173))then -- 如果按下Down键
                                noclip_pos = GetOffsetFromEntityInWorldCoords(ESX.PlayerData.ped, 0.0, 0.0, -1.0) -- 获取距离玩家角色位置后方1个单位的坐标
                        end
                else
                        Citizen.Wait(200) -- 等待200毫秒
                end
        end
end)

RegisterNetEvent("esx:killPlayer") -- 注册一个网络事件 "esx:killPlayer"
AddEventHandler("esx:killPlayer", function() -- 处理 "esx:killPlayer" 事件
SetEntityHealth(ESX.PlayerData.ped, 0) -- 将玩家角色血量设置为0
end)

RegisterNetEvent("esx:freezePlayer") -- 注册一个网络事件 "esx:freezePlayer"
AddEventHandler("esx:freezePlayer", function(input) -- 处理 "esx:freezePlayer" 事件,并传入参数input
    local player = PlayerId() -- 获取玩家的ID
    if input == 'freeze' then -- 如果input为'freeze'
      SetEntityCollision(ESX.PlayerData.ped, false) -- 设置玩家角色碰撞为false
      FreezeEntityPosition(ESX.PlayerData.ped, true) -- 冻结玩家角色位置
      SetPlayerInvincible(player, true) -- 设置玩家无敌为true
    elseif input == 'unfreeze' then -- 如果input为'unfreeze'
      SetEntityCollision(ESX.PlayerData.ped, true) -- 设置玩家角色碰撞为true
          FreezeEntityPosition(ESX.PlayerData.ped, false) -- 解冻玩家角色位置
      SetPlayerInvincible(player, false) -- 设置玩家无敌为false
    end
end)
页: [1]
查看完整版本: 翻译一下