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
相关产品推荐
相关产品推荐

