我目前正在编写一个特殊的恢复脚本,允许普通玩家在没有EMS的情况下互相恢复。
这是我的"previve-s.lua“(服务器端脚本)中的代码:
ESX=nil
Citizen.CreateThread(function()
while ESX==nil do
TriggerEvent('esx:getSharedObject',function(obj) ESX=obj end)
Citizen.Wait(0)
end
end)
RegisterCommand("previve", function()
local ped=GetPlayerPed(-1)
local playerCoords=GetEntityCoords(ped)
local cplayer,cdistance=GetClosestPlayer()
local playerCoords2=GetEntityCoords(ped2)
if EmsCount==0 and cdistance<10 and IsPedDeadOrDying(cplayer,1) then
TaskStartScenarioInPlace(ped,'CODE_HUMAN_MEDIC_TEND_TO_DEAD',0,true)
Citizen.Wait(7000)
TriggerClientEvent("revive",ped2)
ClearPedTasks(ped)
elseif EmsCount>0 then
Notif("There are EMS on! You cannot revive this player. Contact EMS for help!")
elseif cdistance>10 and IsPedDeadOrDying(cplayer,1) then
Notif("Get closer to the player.")
elseif not IsPedDeadOrDying(cplayer,1) then
Notif("The player isn't dead! Why are you even trying?")
end
end)
RegisterNetEvent("revive")
AddEventHandler("revive", function(k)
local plyCoords = GetEntityCoords(k)
ResurrectPed(k)
ClearPedBloodDamage(k)
SetEntityHealth(k, 200)
ClearPedTasksImmediately(k)
SetEntityCoords(k, plyCoords.x, plyCoords.y, plyCoords.z + 1.0, 0, 0, 0, 0)
end)
function GetClosestPlayer()
local players = GetPlayers()
local closestDistance = -1
local closestPlayer = -1
local ply = GetPlayerPed(-1)
local plyCoords = GetEntityCoords(ply, 0)
for index,value in ipairs(players) do
local target = GetPlayerPed(value)
if(target ~= ply) then
local targetCoords = GetEntityCoords(target, 0)
local distance = Vdist(targetCoords.x,targetCoords.y,targetCoords.z,plyCoords.x,plyCoords.y,plyCoords.z)
if(closestDistance == -1 or closestDistance > distance) then
closestPlayer = value
closestDistance = distance
end
end
end
return closestPlayer, closestDistance
end这是我在“previve-c.lua”中的代码:
function Notif(msg)
SetNotificationTextEntry("STRING")
AddTextComponentString(msg)
DrawNotification(true, false)
end
Citizen.CreateThread(function()
EmsCount=0
for _, player in ipairs(GetActivePlayers()) do
Citizen.Wait(5)
local ped1 = GetPlayerPed(player)
if ped1.job.name=='ambulance' then
EmsCount=EmsCount+1
end
end
return EmsCount
end)当我尝试"/previve“时,从控制台得到的错误是:
脚本:previve脚本错误:@previve/server/previve-s.lua:53:尝试调用一个零值(全局'Vdist')脚本:previve> GetClosestPlayer (@previve/server/previve-s.lua:53)
脚本:previve> ref (@previve/server/previve-s.lua:12)
发布于 2022-07-01 20:10:39
我不是FiveM方面的专家,但是根据文档,服务器API中没有Vdist函数。这是客户端API中的一个函数
https://docs.fivem.net/natives/?_0x2A488C176D52CCA5
在第53行中,您试图调用一个应该是Vdist的零值。
https://stackoverflow.com/questions/72832754
复制相似问题