这是一个关于使用Lua语言编写FiveM脚本的问题;
我想要获取与执行该事件的玩家最近的玩家的ID或名称。我怎么才能得到这个?我目前有:(Client.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)
发布于 2020-06-27 16:45:48
我不知道这是否对你有帮助,但你可以尝试以下功能之一:
https://runtime.fivem.net/doc/natives/?_0x7196842CB375CDB3
https://runtime.fivem.net/doc/natives/?_0xC33AB876A77F8164
我个人使用下面的这个函数来获得我为我的JS框架所做的距离(对于localchat,但在您的情况下也应该适用)。
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;
}
}
}
});
希望能有所帮助
https://stackoverflow.com/questions/62345979
复制相似问题