Jump to content

[QUESTION] About a name tag


nyxudf

Recommended Posts

Hello everyone, I have a question about this script that I found in the community. It doesn't have any errors on startup, I just want to know how I could hide the local player's tag but keep others visible.

Client side:

myfont = "default-bold"
nametags_Root = getRootElement()
nametags_ResRoot = getResourceRootElement(getThisResource())
nametags_Players = getElementsByType('player')
nametags_Me = getLocalPlayer()

nametag = {}
local nametags = {}
local sWidth,sHeight = guiGetScreenSize()
local Nametags_Hide = false
local Nametags_Scale = 0.36
local Nametags_Alpha_Distance = 30 
local Nametags_Distance = 40
local Nametags_Alpha = 255
local Nametags_Text_Bar_Space = 1
local Nametags_Width = 50
local Nametags_Height = 20
local Nametags_Size = 0.45
local Nametags_Outline_Thickness = 1.2
local Nametags_Alpha_Diff = Nametags_Distance - Nametags_Alpha_Distance
Nametags_Scale = 1/Nametags_Scale * 800 / sHeight 

local maxScaleCurve = { {0, 0}, {3, 3}, {13, 5} }
local textScaleCurve = { {0, 0.8}, {0.8, 1.2}, {99, 99} }
local textAlphaCurve = { {0, 0}, {25, 100}, {120, 190}, {255, 190} }

function nametags.Create ( player )
	nametags[player] = true
end

function nametags.Destroy ( player )
	nametags[player] = nil
end

addEventHandler ( "onClientRender", nametags_Root,
	function()
		if getElementData(getLocalPlayer(), "state.hud") == "disabled" then return end
		for i,player in ipairs(nametags_Players) do
			if isElement(player) then
				setPlayerNametagShowing ( player, false )
				if not nametags[player] then
					nametags.Create ( player )
				end
			end
		end
		if Nametags_Hide then
			return
		end
		local x,y,z = getCameraMatrix()
		for player in pairs(nametags) do 
			while true do
				if not isElement(player) then break end
				if getElementDimension(player) ~= getElementDimension(nametags_Me) then break end
				local px,py,pz = getElementPosition ( player )
				local bx, by, bz = getPedBonePosition( player, 5 )
				if processLineOfSight(x, y, z, px, py, pz, true, false, false, true, false, true) then break end
				local playerDistance = getDistanceBetweenPoints3D ( x,y,z,px,py,pz )
				if playerDistance <= Nametags_Distance then
					--Get screen position
					local sx,sy = getScreenFromWorldPosition( bx + 0, by, bz + 0.4 )
					if not sx or not sy then break end

					--Calculate our components
					local scale = 1/(Nametags_Scale * (playerDistance / Nametags_Distance))
					local alpha = ((playerDistance - Nametags_Alpha_Distance) / Nametags_Alpha_Diff)
					alpha = (alpha < 0) and Nametags_Alpha or Nametags_Alpha-(alpha*Nametags_Alpha)
					scale = math.evalCurve(maxScaleCurve,scale)
					local textScale = math.evalCurve(textScaleCurve,scale)
					local textAlpha = math.evalCurve(textAlphaCurve,alpha)
					local outlineThickness = Nametags_Outline_Thickness*(scale)
					--Requirements
					local team = getPlayerTeam(player)
                    local level = getElementData(player, "LV") or 0
                    local Reputation = getElementData(player, "Reputation") or "player"
					local r,g,b = getPlayerNametagColor(player)
					local offset = (scale) * Nametags_Text_Bar_Space/2
					local playerName = getPlayerName(player)
					local imageSize = dxGetFontHeight ( textScale*Nametags_Size, myfont )
                    local lp = getElementData(player, "experience.rank") or "Newbie"
					local bitt = interpolateBetween(40, 0, 0, 255, 0, 0, ((getTickCount()) / 1300), "SineCurve")
					local isim  = getPlayerName(player):gsub('#%x%x%x%x%x%x', '')

					--Draw our text
					
					dxDrawText ( isim.."", sx + 0.5*scale, sy - offset + 0.5*scale, sx + 0.5*scale, sy - offset + 0.5*scale, tocolor(0,0,0,255), textScale*Nametags_Size*1., myfont, "center", "bottom", false, false, false, true, true ) 
					dxDrawText ( playerName.."", sx, sy - offset, sx, sy - offset, tocolor(r,g,b,255), textScale*Nametags_Size*1., myfont, "center", "bottom", false, false, false, true, true )
					
					
					nameWidth = dxGetTextWidth ( playerName.."", textScale*Nametags_Size, myfont )
                    teamWidth = nameWidth
					if Reputation then
					--	dxDrawImage ( sx - math.max(nameWidth/2, teamWidth/2) - 40*scale, sy - 2*imageSize, 7*imageSize, 2*imageSize, ""..Reputation..".png" )
					end
				end
				break
			end
		end
	end
)

function nametagsCreate()
	for i,player in ipairs(getElementsByType"player") do
		nametags.Create ( player )
		nametags.Create ( localPlayer )
		setElementData(player, "nametags", "enabled")
	end
end
addEventHandler('onClientResourceStart', nametags_Root, nametagsCreate)

function nametagsCreateOnJoin()
	if source == nametags_Me then
	return
	end
	setPlayerNametagShowing ( source, false )
	nametags.Create ( source )
end
addEventHandler('onClientPlayerJoin', nametags_Root, nametagsCreateOnJoin)

function nametagsDestroy()
	nametags.Destroy ( source )
end
addEventHandler('onClientPlayerQuit', nametags_Root, nametagsDestroy)

function math.lerp(from,to,alpha)
    return from + (to-from) * alpha
end

function math.evalCurve( curve, input )
	if input<curve[1][1] then
		return curve[1][2]
	end
	for idx=2,#curve do
		if input<curve[idx][1] then
			local x1 = curve[idx-1][1]
			local y1 = curve[idx-1][2]
			local x2 = curve[idx][1]
			local y2 = curve[idx][2]
			local alpha = (input - x1)/(x2 - x1);
			return math.lerp(y1,y2,alpha)
		end
	end
	return curve[#curve][2]
end

function dxDrawColorText(str, ax, ay, bx, by, color, scale, font,alignX,alignY,clip, wordBreak, postGUI)
  local pat = "(.-)#(%x%x%x%x%x%x)"
  local s, e, cap, col = str:find(pat, 1)
  local last = 1
  while s do
    if s ~= 1 or cap ~= "" then 
      local w = dxGetTextWidth(cap, scale, font)
      dxDrawText(cap, ax, ay, ax + w, by, color, scale, font,alignX,alignY,clip, wordBreak, postGUI)
      ax = ax + w
      color = tocolor(tonumber("0x"..string.sub(col, 1, 2)), tonumber("0x"..string.sub(col, 3, 4)), tonumber("0x"..string.sub(col, 5, 6)), 255)
    end
    last = e+1
    s, e, cap, col = str:find(pat, last)
  end
  if last <= #str then
    cap = str:sub(last)
    local w = dxGetTextWidth(cap, scale, font)
    dxDrawText(cap, ax, ay, ax + w, by, color, scale, font,alignX,alignY,clip, wordBreak, postGUI)
  end
end

Thanks.

Link to comment
myfont = "default-bold"
nametags_Root = getRootElement()
nametags_ResRoot = getResourceRootElement(getThisResource())
nametags_Players = getElementsByType('player')
nametags_Me = getLocalPlayer()

nametag = {}
local nametags = {}
local sWidth,sHeight = guiGetScreenSize()
local Nametags_Hide = false
local Nametags_Scale = 0.36
local Nametags_Alpha_Distance = 30 
local Nametags_Distance = 40
local Nametags_Alpha = 255
local Nametags_Text_Bar_Space = 1
local Nametags_Width = 50
local Nametags_Height = 20
local Nametags_Size = 0.45
local Nametags_Outline_Thickness = 1.2
local Nametags_Alpha_Diff = Nametags_Distance - Nametags_Alpha_Distance
Nametags_Scale = 1/Nametags_Scale * 800 / sHeight 

local maxScaleCurve = { {0, 0}, {3, 3}, {13, 5} }
local textScaleCurve = { {0, 0.8}, {0.8, 1.2}, {99, 99} }
local textAlphaCurve = { {0, 0}, {25, 100}, {120, 190}, {255, 190} }

function nametags.Create ( player )
	if (player == nametags_Me) then return end
	nametags[player] = true
end

function nametags.Destroy ( player )
	nametags[player] = nil
end

addEventHandler ( "onClientRender", nametags_Root,
	function()
		if getElementData(getLocalPlayer(), "state.hud") == "disabled" then return end
		for i,player in ipairs(nametags_Players) do
			if isElement(player) then
				setPlayerNametagShowing ( player, false )
				if not nametags[player] then
					nametags.Create ( player )
				end
			end
		end
		if Nametags_Hide then
			return
		end
		local x,y,z = getCameraMatrix()
		for player in pairs(nametags) do 
			while true do
				if not isElement(player) then break end
				if getElementDimension(player) ~= getElementDimension(nametags_Me) then break end
				local px,py,pz = getElementPosition ( player )
				local bx, by, bz = getPedBonePosition( player, 5 )
				if processLineOfSight(x, y, z, px, py, pz, true, false, false, true, false, true) then break end
				local playerDistance = getDistanceBetweenPoints3D ( x,y,z,px,py,pz )
				if playerDistance <= Nametags_Distance then
					--Get screen position
					local sx,sy = getScreenFromWorldPosition( bx + 0, by, bz + 0.4 )
					if not sx or not sy then break end

					--Calculate our components
					local scale = 1/(Nametags_Scale * (playerDistance / Nametags_Distance))
					local alpha = ((playerDistance - Nametags_Alpha_Distance) / Nametags_Alpha_Diff)
					alpha = (alpha < 0) and Nametags_Alpha or Nametags_Alpha-(alpha*Nametags_Alpha)
					scale = math.evalCurve(maxScaleCurve,scale)
					local textScale = math.evalCurve(textScaleCurve,scale)
					local textAlpha = math.evalCurve(textAlphaCurve,alpha)
					local outlineThickness = Nametags_Outline_Thickness*(scale)
					--Requirements
					local team = getPlayerTeam(player)
                    local level = getElementData(player, "LV") or 0
                    local Reputation = getElementData(player, "Reputation") or "player"
					local r,g,b = getPlayerNametagColor(player)
					local offset = (scale) * Nametags_Text_Bar_Space/2
					local playerName = getPlayerName(player)
					local imageSize = dxGetFontHeight ( textScale*Nametags_Size, myfont )
                    local lp = getElementData(player, "experience.rank") or "Newbie"
					local bitt = interpolateBetween(40, 0, 0, 255, 0, 0, ((getTickCount()) / 1300), "SineCurve")
					local isim  = getPlayerName(player):gsub('#%x%x%x%x%x%x', '')

					--Draw our text
					
					dxDrawText ( isim.."", sx + 0.5*scale, sy - offset + 0.5*scale, sx + 0.5*scale, sy - offset + 0.5*scale, tocolor(0,0,0,255), textScale*Nametags_Size*1., myfont, "center", "bottom", false, false, false, true, true ) 
					dxDrawText ( playerName.."", sx, sy - offset, sx, sy - offset, tocolor(r,g,b,255), textScale*Nametags_Size*1., myfont, "center", "bottom", false, false, false, true, true )
					
					
					nameWidth = dxGetTextWidth ( playerName.."", textScale*Nametags_Size, myfont )
                    teamWidth = nameWidth
					if Reputation then
					--	dxDrawImage ( sx - math.max(nameWidth/2, teamWidth/2) - 40*scale, sy - 2*imageSize, 7*imageSize, 2*imageSize, ""..Reputation..".png" )
					end
				end
				break
			end
		end
	end
)

function nametagsCreate()
	for i,player in ipairs(getElementsByType"player") do
		nametags.Create ( player )
		setElementData(player, "nametags", "enabled")
	end
end
addEventHandler('onClientResourceStart', nametags_Root, nametagsCreate)

function nametagsCreateOnJoin()
	if source == nametags_Me then
	return
	end
	setPlayerNametagShowing ( source, false )
	nametags.Create ( source )
end
addEventHandler('onClientPlayerJoin', nametags_Root, nametagsCreateOnJoin)

function nametagsDestroy()
	nametags.Destroy ( source )
end
addEventHandler('onClientPlayerQuit', nametags_Root, nametagsDestroy)

function math.lerp(from,to,alpha)
    return from + (to-from) * alpha
end

function math.evalCurve( curve, input )
	if input<curve[1][1] then
		return curve[1][2]
	end
	for idx=2,#curve do
		if input<curve[idx][1] then
			local x1 = curve[idx-1][1]
			local y1 = curve[idx-1][2]
			local x2 = curve[idx][1]
			local y2 = curve[idx][2]
			local alpha = (input - x1)/(x2 - x1);
			return math.lerp(y1,y2,alpha)
		end
	end
	return curve[#curve][2]
end

function dxDrawColorText(str, ax, ay, bx, by, color, scale, font,alignX,alignY,clip, wordBreak, postGUI)
  local pat = "(.-)#(%x%x%x%x%x%x)"
  local s, e, cap, col = str:find(pat, 1)
  local last = 1
  while s do
    if s ~= 1 or cap ~= "" then 
      local w = dxGetTextWidth(cap, scale, font)
      dxDrawText(cap, ax, ay, ax + w, by, color, scale, font,alignX,alignY,clip, wordBreak, postGUI)
      ax = ax + w
      color = tocolor(tonumber("0x"..string.sub(col, 1, 2)), tonumber("0x"..string.sub(col, 3, 4)), tonumber("0x"..string.sub(col, 5, 6)), 255)
    end
    last = e+1
    s, e, cap, col = str:find(pat, last)
  end
  if last <= #str then
    cap = str:sub(last)
    local w = dxGetTextWidth(cap, scale, font)
    dxDrawText(cap, ax, ay, ax + w, by, color, scale, font,alignX,alignY,clip, wordBreak, postGUI)
  end
end

This will do the needful. :)

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...