You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fivem头顶ID显示脚本修改:5秒自动关闭并添加dpemote think3动画

FiveM 头顶ID显示脚本修改版

修改说明

  • 原按键切换逻辑替换为单次触发逻辑,按下按键后ID自动显示5秒,到期自动关闭,新增按键防抖避免重复触发
  • 按键触发时直接调用dpemote公开导出接口播放think3动画,无需额外注册命令
disPlayerNames = 10 --distance you see IDs at 
keyToToggleIDs = 20 --left alt by default
debounceDelay = 300 --按键防抖间隔,单位毫秒,避免短时间重复触发

playerDistances = {}
showIDsAboveHead = false
lastPressTime = 0

Citizen.CreateThread(function()
    while true do 
        Citizen.Wait(0)
        -- 改用JustPressed仅触发一次按键按下事件,加上防抖逻辑
        if IsControlJustPressed(0, keyToToggleIDs) and GetGameTimer() - lastPressTime > debounceDelay then
            lastPressTime = GetGameTimer()
            showIDsAboveHead = true
            -- 5秒后自动关闭显示
            Citizen.SetTimeout(5000, function()
                showIDsAboveHead = false
            end)
            -- 播放dpemote的think3动画
            if exports['dpemotes'] then
                exports['dpemotes']:PlayEmote("think3")
            end
        end
    end
end)

Citizen.CreateThread(function()
    while true do
        for id = 0, 255 do
            if GetPlayerPed(id) ~= GetPlayerPed(-1) then
                x1, y1, z1 = table.unpack(GetEntityCoords(GetPlayerPed(-1), true))
                x2, y2, z2 = table.unpack(GetEntityCoords(GetPlayerPed(id), true))
                distance = math.floor(GetDistanceBetweenCoords(x1,  y1,  z1,  x2,  y2,  z2,  true))
                playerDistances[id] = distance
            end
        end
        Citizen.Wait(1000)
    end
end)

Citizen.CreateThread(function()
    while true do
        if showIDsAboveHead then
            for id = 0, 255 do 
                if NetworkIsPlayerActive(id) then
                    if GetPlayerPed(id) ~= GetPlayerPed(-1) then
                        if (playerDistances[id] < disPlayerNames) then
                            x2, y2, z2 = table.unpack(GetEntityCoords(GetPlayerPed(id), true))
                            if NetworkIsPlayerTalking(id) then
                                DrawText3D(x2, y2, z2+1, GetPlayerServerId(id), 247,124,24)
                            else
                                DrawText3D(x2, y2, z2+1, GetPlayerServerId(id), 255,255,255)
                            end
                        end  
                    end
                end
            end
        end
        Citizen.Wait(0)
    end
end)

function DrawText3D(x,y,z, text, r,g,b) 
    local onScreen,_x,_y=World3dToScreen2d(x,y,z)
    local px,py,pz=table.unpack(GetGameplayCamCoords())
    local dist = GetDistanceBetweenCoords(px,py,pz, x,y,z, 1)
 
    local scale = (1/dist)*2
    local fov = (1/GetGameplayCamFov())*100
    local scale = scale*fov
   
    if onScreen then
        SetTextScale(0.0*scale, 0.55*scale)
        SetTextFont(0)
        SetTextProportional(1)
        SetTextColour(r, g, b, 255)
        SetTextDropshadow(0, 0, 0, 0, 255)
        SetTextEdge(2, 0, 0, 0, 150)
        SetTextDropShadow()
        SetTextOutline()
        SetTextEntry("STRING")
        SetTextCentre(1)
        AddTextComponentString(text)
        DrawText(_x,_y)
    end
end

注意事项

  • 需确保dpemotes脚本优先于本脚本启动,否则动画调用会失效
  • 若动画无法正常播放,可检查你的dpemote资源名称,若资源名不是dpemotes,需将代码中exports['dpemotes']改为对应资源名
  • 可自行调整顶部的disPlayerNames修改ID显示距离,keyToToggleIDs修改触发按键编号

内容的提问来源于stack exchange,提问作者Stetco Rene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:45:03