首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetPlayerPed(-1)指向FiveM ESX编码上的零

GetPlayerPed(-1)指向FiveM ESX编码上的零
EN

Stack Overflow用户
提问于 2022-07-02 02:41:32
回答 1查看 930关注 0票数 0

我试图编程一个FiveM LUA脚本,它基本上允许玩家"/previve“当没有特快专递的时候。这使他们做了一个动画,并恢复了播放器。但是,问题是,由于某种原因,GetPlayerPed(-1)返回零,当它应该返回发出/previve命令的人的ped时。

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

代码语言:javascript
复制
ESX=nil
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)

ESX.RegisterCommand('previve','user', function(playerId)
local src=GetPlayerPed(-1)
RevivePlayer(src)
end)

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

代码语言:javascript
复制
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)

以下是产生的错误:

代码语言:javascript
复制
[      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)

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

(非常感谢:)

EN

回答 1

Stack Overflow用户

发布于 2022-07-09 13:38:33

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

如果您使用的是最新版本,这应该是可行的。

服务器端:

代码语言:javascript
复制
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'})

客户端:

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
Citizen.CreateThread(function()
    EmsCount = 0
    for _,xPlayer in pairs(ESX.GetExtendedPlayers('job', 'ambulance')) do
        EmsCount = EmsCount + 1
    end
    return EmsCount
end)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72836104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档