players = {}
local function cleanUpGamerTags()
for _, v in pairs(Tag) do
if IsMpGamerTagActive(v) then
RemoveMpGamerTag(v)
end
end
Tag = {}
end
function DrawText3D(x, y, z, text)
SetTextScale(0.6, 0.6)
SetTextFont(1)
SetTextProportional(1)
SetTextColour(255, 0, 0, 255)
SetTextEntry("STRING")
SetTextCentre(true)
AddTextComponentString(text)
SetDrawOrigin(x,y,z, 0)
DrawText(0.0, 0.0)
local factor = (string.len(text)) / 370
-- DrawRect(0.0, 0.0+0.0125, 0.017+ factor, 0.03, 0, 0, 0, 75)
ClearDrawOrigin()
end
function ToggleNames()
if Config.NewNamesLogic then
if not toggleNameThread then
TriggerServerEvent("snipe-menu:server:sendLogs", "triggered", Config.Locales["toggle_name_used"])
toggleNameThread = true
StartNamesThread()
StartDistanceThread()
StartGroupThread()
while toggleNameThread do
local p = promise.new()
TriggerCallback("snipe-menu:server:getBlipsInfo", function(result)
p:resolve(result)
end)
players = Citizen.Await(p)
Wait(5000)
end
else
toggleNameThread = false
players = {}
CleanupOnClose()
end
else
if not toggleNameThread then
TriggerServerEvent("snipe-menu:server:sendLogs", "triggered", Config.Locales["toggle_name_used"])
toggleNameThread = true
while toggleNameThread do
local curCoords = GetEntityCoords(PlayerPedId())
local allActivePlayers = GetActivePlayers()
for _, i in ipairs(allActivePlayers) do
local playeridx = GetPlayerFromServerId(i)
local ped = GetPlayerPed(i)
local name = 'ID: '..GetPlayerServerId(i)..' | '..GetPlayerName(i)
if not IsMpGamerTagActive(Tag[i]) then
Tag[i] = CreateFakeMpGamerTag(ped, name, false, false, "", false)
end
if #(curCoords - GetEntityCoords(ped)) <= 150.0 then
SetMpGamerTagAlpha(Tag[i], 0, 255) -- Sets "MP_TAG_GAMER_NAME" bar alpha to 100% (not needed just as a fail safe)
SetMpGamerTagAlpha(Tag[i], 2, 255) -- Sets "MP_TAG_HEALTH_ARMOUR" bar alpha to 100%
SetMpGamerTagAlpha(Tag[i], 4, 255) -- Sets "MP_TAG_AUDIO_ICON" bar alpha to 100%
SetMpGamerTagAlpha(Tag[i], 6, 255) -- Sets "MP_TAG_PASSIVE_MODE" bar alpha to 100%
SetMpGamerTagHealthBarColour(Tag[i], 25) --https://wiki.rage.mp/index.php?title=Fonts_and_Colors
SetMpGamerTagVisibility(Tag[i], 0, true) -- Activates the player ID Char name and FiveM name
SetMpGamerTagVisibility(Tag[i], 2, true) -- Activates the health (and armor if they have it on) bar below the player names
if GetPlayerInvincible(playeridx) then
SetMpGamerTagVisibility(Tag[i], 6, true) -- If player is in godmode a circle with a line through it will show up
else
SetMpGamerTagVisibility(Tag[i], 6, false)
end
else
SetMpGamerTagVisibility(Tag[i], 0, 0)
SetMpGamerTagVisibility(Tag[i], 2, 0)
end
end
Wait(150)
end
else
cleanUpGamerTags()
toggleNameThread = false
end
end
end
AddEventHandler("onResourceStop", function(resourceName)
if resourceName == "snipe-menu" then
cleanUpGamerTags()
end
end)
客户端代码能用ESX.GetPlayerFromId吗, 大哥ESX = exports["es_extended"]:getSharedObject()
players = {}
local function cleanUpGamerTags()
for _, v in pairs(Tag) do
if IsMpGamerTagActive(v) then
RemoveMpGamerTag(v)
end
end
Tag = {}
end
function DrawText3D(x, y, z, text)
SetTextScale(0.6, 0.6)
SetTextFont(1)
SetTextProportional(1)
SetTextColour(255, 0, 0, 255)
SetTextEntry("STRING")
SetTextCentre(true)
AddTextComponentString(text)
SetDrawOrigin(x,y,z, 0)
DrawText(0.0, 0.0)
local factor = (string.len(text)) / 370
-- DrawRect(0.0, 0.0+0.0125, 0.017+ factor, 0.03, 0, 0, 0, 75)
ClearDrawOrigin()
end
function ToggleNames()
if Config.NewNamesLogic then
if not toggleNameThread then
TriggerServerEvent("snipe-menu:server:sendLogs", "triggered", Config.Locales["toggle_name_used"])
toggleNameThread = true
StartNamesThread()
StartDistanceThread()
StartGroupThread()
while toggleNameThread do
local p = promise.new()
TriggerCallback("snipe-menu:server:getBlipsInfo", function(result)
p:resolve(result)
end)
players = Citizen.Await(p)
Wait(5000)
end
else
toggleNameThread = false
players = {}
CleanupOnClose()
end
else
if not toggleNameThread then
TriggerServerEvent("snipe-menu:server:sendLogs", "triggered", Config.Locales["toggle_name_used"])
toggleNameThread = true
while toggleNameThread do
local curCoords = GetEntityCoords(PlayerPedId())
local allActivePlayers = GetActivePlayers()
for _, i in ipairs(allActivePlayers) do
local playeridx = GetPlayerFromServerId(i)
local ped = GetPlayerPed(i)
local xPlayer = ESX.GetPlayerFromId(i)
local fullName = xPlayer.getName()
local name = 'ID: '..GetPlayerServerId(i)..' | '..fullName
if not IsMpGamerTagActive(Tag) then
Tag = CreateFakeMpGamerTag(ped, name, false, false, "", false)
end
if #(curCoords - GetEntityCoords(ped)) <= 150.0 then
SetMpGamerTagAlpha(Tag, 0, 255) -- Sets "MP_TAG_GAMER_NAME" bar alpha to 100% (not needed just as a fail safe)
SetMpGamerTagAlpha(Tag, 2, 255) -- Sets "MP_TAG_HEALTH_ARMOUR" bar alpha to 100%
SetMpGamerTagAlpha(Tag, 4, 255) -- Sets "MP_TAG_AUDIO_ICON" bar alpha to 100%
SetMpGamerTagAlpha(Tag, 6, 255) -- Sets "MP_TAG_PASSIVE_MODE" bar alpha to 100%
SetMpGamerTagHealthBarColour(Tag, 25) --https://wiki.rage.mp/index.php?title=Fonts_and_Colors
SetMpGamerTagVisibility(Tag, 0, true) -- Activates the player ID Char name and FiveM name
SetMpGamerTagVisibility(Tag, 2, true) -- Activates the health (and armor if they have it on) bar below the player names
if GetPlayerInvincible(playeridx) then
SetMpGamerTagVisibility(Tag, 6, true) -- If player is in godmode a circle with a line through it will show up
else
SetMpGamerTagVisibility(Tag, 6, false)
end
else
SetMpGamerTagVisibility(Tag, 0, 0)
SetMpGamerTagVisibility(Tag, 2, 0)
end
end
Wait(150)
end
else
cleanUpGamerTags()
toggleNameThread = false
end
end
end
AddEventHandler("onResourceStop", function(resourceName)
if resourceName == "snipe-menu" then
cleanUpGamerTags()
end
end)
Lua:players = {} local function cleanUpGamerTags() for _, v in pairs(Tag) do if IsMpGamerTagActive(v) then RemoveMpGamerTag(v) end end Tag = {} end function DrawText3D(x, y, z, text) SetTextScale(0.6, 0.6) SetTextFont(1) SetTextProportional(1) SetTextColour(255, 0, 0, 255) SetTextEntry("STRING") SetTextCentre(true) AddTextComponentString(text) SetDrawOrigin(x,y,z, 0) DrawText(0.0, 0.0) local factor = (string.len(text)) / 370 -- DrawRect(0.0, 0.0+0.0125, 0.017+ factor, 0.03, 0, 0, 0, 75) ClearDrawOrigin() end function ToggleNames() if Config.NewNamesLogic then if not toggleNameThread then TriggerServerEvent("snipe-menu:server:sendLogs", "triggered", Config.Locales["toggle_name_used"]) toggleNameThread = true StartNamesThread() StartDistanceThread() StartGroupThread() while toggleNameThread do local p = promise.new() TriggerCallback("snipe-menu:server:getBlipsInfo", function(result) p:resolve(result) end) players = Citizen.Await(p) Wait(5000) end else toggleNameThread = false players = {} CleanupOnClose() end else if not toggleNameThread then TriggerServerEvent("snipe-menu:server:sendLogs", "triggered", Config.Locales["toggle_name_used"]) toggleNameThread = true while toggleNameThread do local curCoords = GetEntityCoords(PlayerPedId()) local allActivePlayers = GetActivePlayers() for _, i in ipairs(allActivePlayers) do local playeridx = GetPlayerFromServerId(i) local ped = GetPlayerPed(i) local name = 'ID: '..GetPlayerServerId(i)..' | '..GetPlayerName(i) if not IsMpGamerTagActive(Tag[i]) then Tag[i] = CreateFakeMpGamerTag(ped, name, false, false, "", false) end if #(curCoords - GetEntityCoords(ped)) <= 150.0 then SetMpGamerTagAlpha(Tag[i], 0, 255) -- Sets "MP_TAG_GAMER_NAME" bar alpha to 100% (not needed just as a fail safe) SetMpGamerTagAlpha(Tag[i], 2, 255) -- Sets "MP_TAG_HEALTH_ARMOUR" bar alpha to 100% SetMpGamerTagAlpha(Tag[i], 4, 255) -- Sets "MP_TAG_AUDIO_ICON" bar alpha to 100% SetMpGamerTagAlpha(Tag[i], 6, 255) -- Sets "MP_TAG_PASSIVE_MODE" bar alpha to 100% SetMpGamerTagHealthBarColour(Tag[i], 25) --https://wiki.rage.mp/index.php?title=Fonts_and_Colors SetMpGamerTagVisibility(Tag[i], 0, true) -- Activates the player ID Char name and FiveM name SetMpGamerTagVisibility(Tag[i], 2, true) -- Activates the health (and armor if they have it on) bar below the player names if GetPlayerInvincible(playeridx) then SetMpGamerTagVisibility(Tag[i], 6, true) -- If player is in godmode a circle with a line through it will show up else SetMpGamerTagVisibility(Tag[i], 6, false) end else SetMpGamerTagVisibility(Tag[i], 0, 0) SetMpGamerTagVisibility(Tag[i], 2, 0) end end Wait(150) end else cleanUpGamerTags() toggleNameThread = false end end end AddEventHandler("onResourceStop", function(resourceName) if resourceName == "snipe-menu" then cleanUpGamerTags() end end)
客户端
ESX.TriggerServerCallback('getCharacterName', function(characterName)
if characterName then
name = 'ID: '..GetPlayerServerId(i)..' | '..characterName
end
end, GetPlayerServerId(i))
服务端
ESX.RegisterServerCallback('getCharacterName', function(source, cb, targetId)
local xPlayer = ESX.GetPlayerFromId(targetId)
if xPlayer then
local firstname = xPlayer.get('firstName') or ''
local lastname = xPlayer.get('lastName') or ''
if firstname ~= '' or lastname ~= '' then
cb(firstname .. ' ' .. lastname)
else
cb(xPlayer.getName())
end
else
cb(nil)
end
end)