Jump to content

Nametag


-.Paradox.-

Recommended Posts

Hello, this is my nametag code, i want add one thing the player can see his nametag too, thanks for help.

srfont = dxCreateFont("DFHEIMDU_id.ttf",14) 
  
g_Root = getRootElement() 
g_ResRoot = getResourceRootElement(getThisResource()) 
g_Players = getElementsByType('player') 
g_Me = getLocalPlayer() 
  
nametag = {} 
local nametags = {} 
local g_screenX,g_screenY = guiGetScreenSize() 
local bHideNametags = false 
  
local NAMETAG_SCALE = 0.3 --Overall adjustment of the nametag, use this to resize but constrain proportions 
local NAMETAG_ALPHA_DISTANCE = 50 --Distance to start fading out 
local NAMETAG_DISTANCE = 100 --Distance until we're gone 
local NAMETAG_ALPHA = 255 --The overall alpha level of the nametag 
--The following arent actual pixel measurements, they're just proportional constraints 
local NAMETAG_TEXT_BAR_SPACE = 1 
local NAMETAG_WIDTH = 50 
local NAMETAG_HEIGHT = 5 
local NAMETAG_TEXTSIZE = 0.3 
local NAMETAG_OUTLINE_THICKNESS = 1.2 
  
  
-- 
local NAMETAG_ALPHA_DIFF = NAMETAG_DISTANCE - NAMETAG_ALPHA_DISTANCE 
NAMETAG_SCALE = 1/NAMETAG_SCALE * 800 / g_screenY 
  
-- Ensure the name tag doesn't get too big 
local maxScaleCurve = { {0, 0}, {3, 3}, {13, 5} } 
-- Ensure the text doesn't get too small/unreadable 
local textScaleCurve = { {0, 0.8}, {0.8, 1.2}, {99, 99} } 
-- Make the text a bit brighter and fade more gradually 
local textAlphaCurve = { {0, 0}, {25, 100}, {120, 190}, {255, 190} } 
  
setPedTargetingMarkerEnabled ( false ) 
  
function nametag.create ( player ) 
    nametags[player] = true 
end 
  
function nametag.destroy ( player ) 
    nametags[player] = nil 
end 
  
addEventHandler ( "onClientPreRender", g_Root, 
    function() 
        if getElementData(getLocalPlayer(), "state.hud") == "disabled" then 
        return 
        end 
        -- Hideous quick fix -- 
        for i,player in ipairs(g_Players) do 
            if isElement(player) then 
                if player ~= g_Me then 
                    setPlayerNametagShowing ( player, false ) 
                    if not nametags[player] then 
                        nametag.create ( player ) 
                    end 
                end 
            end 
        end 
        if bHideNametags 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(g_Me) then break end 
                local px,py,pz = getElementPosition ( player ) 
                if not isLineOfSightClear(x, y, z, px, py, pz, true, false, false, true, false, true) then break end 
                local pdistance = getDistanceBetweenPoints3D ( x,y,z,px,py,pz ) 
                if pdistance <= NAMETAG_DISTANCE then 
                    --Get screenposition 
                    local sx,sy = getScreenFromWorldPosition ( px, py, pz+0.95, 0.06 ) 
                    if not sx or not sy then break end 
                    --Calculate our components 
                    local scale = 1/(NAMETAG_SCALE * (pdistance / NAMETAG_DISTANCE)) 
                    local alpha = ((pdistance - NAMETAG_ALPHA_DISTANCE) / NAMETAG_ALPHA_DIFF) 
                    alpha = (alpha < 0) and NAMETAG_ALPHA or NAMETAG_ALPHA-(alpha*NAMETAG_ALPHA) 
                    scale = math.evalCurve(maxScaleCurve,scale) 
                    local textscale = math.evalCurve(textScaleCurve,scale) 
                    local textalpha = math.evalCurve(textAlphaCurve,alpha) 
                    local outlineThickness = NAMETAG_OUTLINE_THICKNESS*(scale) 
                    --Draw our text 
                    local playerName = getPlayerName(player):gsub("#%x%x%x%x%x%x","") 
                    local r,g,b = getPlayerNametagColor(player) 
                    local offset = (scale) * NAMETAG_TEXT_BAR_SPACE/2 
                    local w = dxGetTextWidth(playerName, textscale * NAMETAG_TEXTSIZE, srfont) / 2 
                    local myR = getElementData(localPlayer, "reputation.reputation") 
                    local playerR = getElementData(player, "reputation.reputation") 
                    
                    local drawX = sx - NAMETAG_WIDTH*scale/2 
                    drawY = sy + offset 
                    local width,height =  NAMETAG_WIDTH*scale, NAMETAG_HEIGHT*scale 
                    dxDrawText ( playerName, sx, sy - offset, sx, sy - offset, tocolor(0,0,0,255), textscale*NAMETAG_TEXTSIZE, srfont, "center", "bottom", false, false, false, true, true ) 
                        if myR and playerR then 
                            if getElementData(localPlayer, "reputation.criminal") == false and getElementData(player, "reputation.criminal") == false then 
                            rr, rg, rb = 158, 210, 229 
                            elseif getElementData(localPlayer, "reputation.criminal") == true and getElementData(player, "reputation.criminal") == false then 
                            rr, rg, rb = 217, 25, 31 
                            elseif getElementData(localPlayer, "reputation.criminal") == false and getElementData(player, "reputation.criminal") == true then 
                            rr, rg, rb = 217, 25, 31 
                            elseif getElementData(localPlayer, "reputation.criminal") == true and getElementData(player, "reputation.criminal") == true then 
                            rr, rg, rb = 246, 231, 89 
                            end 
                        else 
                        rr, rg, rb = r, g, b 
                        end 
                    dxDrawText ( playerName, sx, sy - offset, sx, sy - offset, tocolor(rr,rg,rb,255), textscale*NAMETAG_TEXTSIZE, srfont, "center", "bottom", false, false, false, true, true )         
                    nameWidth = dxGetTextWidth ( playerName, textscale*NAMETAG_TEXTSIZE, srfont ) 
                    teamWidth = nameWidth 
                    local team = getPlayerTeam(player) 
                        if team then 
                        dxDrawText ( "["..getTeamName(team).."]", sx, sy - offset + 6*scale, sx, sy - offset + 6*scale, tocolor(0,0,0,255), textscale*NAMETAG_TEXTSIZE*0.75, srfont, "center", "bottom", false, false, false, true, true ) 
                        dxDrawText ( "["..getTeamName(team).."]", sx, sy - offset + 6*scale, sx, sy - offset + 6*scale, tocolor(rr,rg,rb,255), textscale*NAMETAG_TEXTSIZE*0.75, srfont, "center", "bottom", false, false, false, true, true ) 
                        teamWidth = dxGetTextWidth ( "["..getTeamName(team).."]", textscale*NAMETAG_TEXTSIZE*0.75, srfont ) 
                        end 
                    local imageSize = dxGetFontHeight ( textscale*NAMETAG_TEXTSIZE, srfont ) 
                        if getElementData(player, "Classicon") and fileExists ( getElementData(player, "Classicon") ) then 
                        outputChatBox("I'm in !!") --It will flood your chatbox so remove it once you checked 
                        dxDrawImage ( sx - math.max(nameWidth/2, teamWidth/2) - imageSize - 1*scale, sy - imageSize, imageSize, imageSize, getElementData(player, "Classicon") ) 
                        end 
                end 
                break 
            end 
        end 
    end 
) 
  
  
---------------THE FOLLOWING IS THE MANAGEMENT OF NAMETAGS----------------- 
addEventHandler('onClientResourceStart', g_Root, 
    function() 
        for i,player in ipairs(getElementsByType"player") do 
            if player ~= g_Me then 
                nametag.create ( player ) 
            end 
        end 
    end 
) 
  
addEventHandler ( "onClientPlayerJoin", g_Root, 
    function() 
        if source == g_Me then return end 
        setPlayerNametagShowing ( source, false ) 
        nametag.create ( source ) 
    end 
) 
  
addEventHandler ( "onClientPlayerQuit", g_Root, 
    function() 
        nametag.destroy ( source ) 
    end 
) 
  
-- Math functions 
function math.lerp(from,to,alpha) 
    return from + (to-from) * alpha 
end 
  
-- curve is { {x1, y1}, {x2, y2}, {x3, y3} ... } 
function math.evalCurve( curve, input ) 
    -- First value 
    if input[1][1] then 
        return curve[1][2] 
    end 
    -- Interp value 
    for idx=2,#curve do 
        if input[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] 
            -- Find pos between input points 
            local alpha = (input - x1)/(x2 - x1); 
            -- Map to output points 
            return math.lerp(y1,y2,alpha) 
        end 
    end 
    -- Last value 
    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 
  

Link to comment

I think this is something you edit in another resource (possibly race). But adding setElementData(localPlayer, "state.hud", enabled) to the top should do the trick also. Could be wrong though, just quickly browsed through the first few lines.

On further inspection I'm almost certain what I posted above is wrong :P

I think removing the if statement on line 54 (not the code in it, just the if and end) should do what you're looking for.

Link to comment
  • 2 weeks later...

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...