GetPlayerPed(-1)在FiveM ESX LUA编码中指向nil



我正在尝试编写一个FiveM LUA ESX脚本,它基本上允许玩家"/先前";当没有EMS时。这将促使他们创造动画并唤醒玩家。然而,问题是,由于某种原因,GetPlayerPed(-1)返回nil,当它应该返回发出/previous命令的人的ped时。

下面是产生错误的服务器文件:

ESX=nil
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
ESX.RegisterCommand('previve','user', function(playerId)
local src=GetPlayerPed(-1)
RevivePlayer(src)
end)

下面是带有RevivePlayer函数的客户端文件:

ESX=nil
Citizen.CreateThread(function()
while ESX==nil do
TriggerEvent('esx:getSharedObject',function(obj) ESX=obj end)
Citizen.Wait(0)
end
end)


function RevivePlayer(src)

local closestPlayer, closestDistance = ESX.Game.GetClosestPlayer(src) 
if closestPlayer == -1 or closestDistance > 1.0 then
ESX.ShowNotification(_U('no_players'))
elseif closestPlayer ~=-1 and closestDistance<1.0 and EmsCount==0 then
local closestPlayerPed = GetPlayerPed(closestPlayer)
if IsPedDeadOrDying(closestPlayerPed, 1) then
local playerPed = PlayerPedId()
local lib, anim = 'mini@cpr@char_a@cpr_str', 'cpr_pumpchest'
ESX.ShowNotification(_U('revive_inprogress'))
for i=1, 15 do
Citizen.Wait(900)
ESX.Streaming.RequestAnimDict(lib, function()
TaskPlayAnim(playerPed, lib, anim, 8.0, -8.0, -1, 0, 0.0, false, false, false)
end)
end

TriggerServerEvent('esx_ambulancejob:revive', GetPlayerServerId(closestPlayer))
else
ESX.ShowNotification(_U('player_not_unconscious'))
end
end
end

Citizen.CreateThread(function()
EmsCount=0
local xPlayer = ESX.GetExtendedPlayers('job', 'ambulance') -- Returns xPlayers with the ambulance job
for _, xPlayer in pairs(xPlayer) do
EmsCount=EmsCount+1
end
return EmsCount
end)

产生的错误如下:

[      script:previve] SCRIPT ERROR: @previve/server/previve-s.lua:6: attempt to call a nil value (global 'RevivePlayer')
[      script:previve] > ref (@previve/server/previve-s.lua:6)
[      script:previve] > ref (@es_extended/server/functions.lua:130)

有什么建议如何解决这个问题吗?

非常感谢:)

您使用的是哪个版本的es_extended ?

如果你使用的是最新版本,这应该可以工作。

服务器端:

ESX=nil
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
ESX.RegisterCommand('previve', 'user', function(playerId, args, showError)
TriggerClientEvent('previve:RevivePlayer', playerId)
end, false, {help = 'Help text to use the command'})

客户端:

ESX=nil
Citizen.CreateThread(function()
while ESX == nil do
TriggerEvent('esx:getSharedObject',function(obj) ESX=obj end)
Citizen.Wait(0)
end
end)
RegisterNetEvent('previve:RevivePlayer')
AddEventHandler('previve:RevivePlayer', function()
local playerPed = PlayerPedId()
local playerCoords = GetEntityCoords(playerPed)
local closestPlayer, closestDistance = ESX.Game.GetClosestPlayer(playerCoords)
if closestPlayer == -1 or closestDistance > 1.0 then
ESX.ShowNotification(_U('no_players'))
elseif closestPlayer ~= -1 and closestDistance < 1.0 and EmsCount == 0 then
local closestPlayerPed = GetPlayerPed(closestPlayer)
if IsPedDeadOrDying(closestPlayerPed, 1) then
local lib, anim = 'mini@cpr@char_a@cpr_str', 'cpr_pumpchest'
ESX.ShowNotification(_U('revive_inprogress'))
for i=1, 15 do
Citizen.Wait(900)
ESX.Streaming.RequestAnimDict(lib, function()
TaskPlayAnim(playerPed, lib, anim, 8.0, -8.0, -1, 0, 0.0, false, false, false)
end)
end
TriggerServerEvent('esx_ambulancejob:revive', GetPlayerServerId(closestPlayer))
else
ESX.ShowNotification(_U('player_not_unconscious'))
end
end
end)

最后一个函数必须在服务器端

Citizen.CreateThread(function()
EmsCount = 0
for _,xPlayer in pairs(ESX.GetExtendedPlayers('job', 'ambulance')) do
EmsCount = EmsCount + 1
end
return EmsCount
end)

相关内容

最新更新