如何获得最接近的玩家(FiveM Lua)



这是一个关于使用 LUA 语言的 FiveM 脚本的问题;

我想获取离执行事件的玩家最近的玩家的 ID 或姓名。我怎么得到这个?我目前有:(客户端.lua(

while true do
Citizen.Wait(0)
local ped = GetPlayerPed(-1)
if IsPedInAnyVehicle(ped, false) then
local vehicle = GetVehiclePedIsIn(ped, false)
TriggerServerEvent("cartag:checkTagged")
end
end
end)

然后,它会触发服务器事件:

-- Checks if player is tagged
AddEventHandler("cartag:checkTagged", function()
local ped = source
if tableIndex(tag, ped) then
local indexNr = tableIndex(tag, ped)
if tag[indexNr].tagged then
TriggerClientEvent("cartag:playerIt", ped)
end
end
end)

然后返回到客户端事件:

-- When player is it
AddEventHandler("cartag:playerIt", function()
local ped = GetPlayerPed(-1)
local vehicle = GetVehiclePedIsIn(ped, false)
local t, distance = GetClosestPlayer()
if IsPedInAnyVehicle(t, false) then
if HasEntityCollidedWithAnything(vehicle) then
local dis = Vdist(coords.x, coords.y, coords.z, coordsFront.x, coordsFront.y, coordsFront.z)
if dis <= 1.2 then
-- Trigger tag event
TriggerServerEvent("cartag:tag", closestPlayerId)
end
end
end
end)

GetClosestPlayer看起来像这样:

local players = GetPlayers()
local closestDistance = -1
local closestPlayer = -1
local ped = GetPlayerPed(-1)
local coords = GetEntityCoords(ped)
for i, v in ipairs(players) do
local target = GetPlayerPed(v)
if (target ~= ped) then
local targetCoords = GetEntityCoords(GetPlayerPed(v))
local distance = Vdist(targetCoords.x, targetCoords.y, targetCoords.z, coords.x, coords.y, coords.z)
if (closestDistance == -1 or closestDistance > distance) then
closestPlayer = v
closestDistance = distance
end
end
end
return closestPlayer, closestDistance
end

这也需要:

local players = {}
for _, player in ipairs(GetActivePlayers()) do
local ped_ = GetPlayerPed(player)
table.insert(players, ped_)
end
return players
end

不知何故,这在测试时总是给出一个随机数,距离指向地图下方城市北部的生成点。

所以;如何查看谁是最近的玩家,这个玩家有多远以及那个玩家是否在车里? 提前感谢! (尝试了其他主题的内容,但似乎不起作用( 注意:我不想使用 ESX,想让脚本独立存在。(这是一个汽车的标签游戏脚本...听起来很奇怪,不要怪我x(

我不知道这是否会对您有所帮助,但您可以尝试以下函数之一:

https://runtime.fivem.net/doc/natives/?_0x7196842CB375CDB3

https://runtime.fivem.net/doc/natives/?_0xC33AB876A77F8164

我个人使用下面的函数来获取我为 JS 框架制作的距离(对于本地聊天,但也应该适用于您的情况(。

Lua转换版本:

for i = 1, 255, 1 do
if NetworkIsPlayerActive(i) then
local player = GetPlayerFromServerId(id)
local me = GetPlayerServerId(i)
local coords = GetEntityCoords(GetPlayerPed(i))
local mycoords = GetEntityCoords(GetPlayerPed(player))
local dist = Vdist(mycoords, coords)

if me == id or dist <= 15 then
TriggerEvent('chat:addMessage', { args = { 'It works' }, color: { 230, 171, 255 } })
break
end
end
end

原始JS版本: https://github.com/Jones3106/NodeRP/blob/master/client/events.js#L27

RegisterNetEvent('NodeRP.Client.SendLocalMsg');
onNet("NodeRP.Client.SendLocalMsg", (name, id, msg) => {
for (let i = 0; i < 255; i++) {
if (NetworkIsPlayerActive(i)) {
let player = GetPlayerFromServerId(id);
let me = GetPlayerServerId(i);
let coords = GetEntityCoords(GetPlayerPed(i));
let mycoords = GetEntityCoords(GetPlayerPed(player));
let dist = Vdist(mycoords, coords);

if(me == id || dist <= 15) {
emit('chat:addMessage', { args: [ `${name} ${NodeRP.Locales[Config.Locale]["localchat"]}: ${msg}` ], color: [230, 171, 255] });
break;
}
}
}
});

希望对你有帮助

最新更新