I am trying to program a FiveM LUA ESX script which essentially allows players to "/previve" when there are no EMS on. This makes them do an animation, and revives the player. However, the issue is, for some reason GetPlayerPed(-1) returns nil, when it's supposed to return the ped of whoever issued the /previve command.
Here is the server file that is producing the error:
ESX=nil
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
ESX.RegisterCommand('previve','user', function(playerId)
local src=GetPlayerPed(-1)
RevivePlayer(src)
end)
And here is the client file with the RevivePlayer function:
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)
Here is the error produced:
[ 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)
Any advice on how to fix this?
Thank you very much :)
Which version of es_extended are you using?
If you are using the latest version this should work.
Server Side :
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'})
Client Side :
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)
The last function must be on the server side.
Citizen.CreateThread(function()
EmsCount = 0
for _,xPlayer in pairs(ESX.GetExtendedPlayers('job', 'ambulance')) do
EmsCount = EmsCount + 1
end
return EmsCount
end)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.