首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获得最近的玩家(FiveM Lua)

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

Stack Overflow用户
提问于 2020-06-12 22:07:38
回答 1查看 7.3K关注 0票数 0

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

我想要获取与执行该事件的玩家最近的玩家的ID或名称。我怎么才能得到这个?我目前有:(Client.lua)

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

然后触发服务器事件:

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

然后返回到客户端事件:

代码语言:javascript
运行
复制
-- 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如下所示:

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

这也需要:

代码语言:javascript
运行
复制
    local players = {}
    for _, player in ipairs(GetActivePlayers()) do
        local ped_ = GetPlayerPed(player)
        table.insert(players, ped_)
    end
    return players
end

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

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

EN

回答 1

Stack Overflow用户

发布于 2020-06-27 16:45:48

我不知道这是否对你有帮助,但你可以尝试以下功能之一:

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

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

我个人使用下面的这个函数来获得我为我的JS框架所做的距离(对于localchat,但在您的情况下也应该适用)。

Lua转换版本:

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

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

希望能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62345979

复制
相关文章

相似问题

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