翻译一下
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)
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]