Jump to content

error en name tag resident


Chaky

Recommended Posts

hola a todos bueno tengo un pequeño problema como dice el titulo con el nametag pasa que lo activo y aparecen los nombres arriba de los usuarios pero despues de unos minutos el nombre desaparece agredeceria su ayuda aca les dejo el codigo

addEventHandler("onClientRender", getRootElement(), function() 
 
for k,player in ipairs(getElementsByType("player")) do
if getElementHealth(player) >= 1 then
local width, height = guiGetScreenSize ()
local lx, ly, lz = getWorldFromScreenPosition ( width/2, height/2, 10 )
setPedLookAt(player, lx, ly, lz)
end
end
   
end)  
 
srfont = dxCreateFont("srfont.ttf",13)
g_Root = getRootElement()
g_ResRoot = getResourceRootElement(getThisResource())
g_Players = getElementsByType('player')
g_Me = getLocalPlayer()
 
nametag = {}
local nametags = {}
sWidth,sHeight = guiGetScreenSize()
local bHideNametags = false
local NAMETAG_SCALE = 0.2
local NAMETAG_ALPHA_DISTANCE = 30
local NAMETAG_DISTANCE = 70
local NAMETAG_ALPHA = 255
local NAMETAG_TEXT_BAR_SPACE = 2
local NAMETAG_WIDTH = 40
local NAMETAG_HEIGHT = 4.2
local NAMETAG_TEXTSIZE = 0.18
local NAMETAG_OUTLINE_THICKNESS = 1.2
 
 
--
local NAMETAG_ALPHA_DIFF = NAMETAG_DISTANCE - NAMETAG_ALPHA_DISTANCE
NAMETAG_SCALE = 1/NAMETAG_SCALE * 800 / sHeight
 
-- 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} }
 
function nametag.create ( player )
    nametags[player] = true
end
 
function nametag.destroy ( player )
    nametags[player] = nil
end
 
   
    function Nametags()
        -- 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 processLineOfSight(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 sx1,sy = getScreenFromWorldPosition ( px, py, pz+1, 1 )
                    local sx,sy = getScreenFromWorldPosition ( px, py, pz+1, 1 )
                    if not sx or not sy then break end
                    --Calculate our components
                    local scale = 1/(NAMETAG_SCALE * (pdistance / NAMETAG_DISTANCE))
                    local scale2 = 8/(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)
                    local DSTRN = 255
                    local r,g,b = getPlayerNametagColor(player)
                    local offset = (scale) * NAMETAG_TEXT_BAR_SPACE/2
                    local offset3 = (scale) * NAMETAG_TEXT_BAR_SPACE/2.1
                    local offset2 = (scale) * NAMETAG_TEXT_BAR_SPACE/0.32
                    local w = dxGetTextWidth(getPlayerNameR(player), textscale * NAMETAG_TEXTSIZE, srfont) / 2
                    local w2 = dxGetTextWidth(getPlayerNameR(player), textscale * NAMETAG_TEXTSIZE, srfont) / 2.025
                    local lvl = getElementData(player,"level")          
                    dxDrawImage(sx + 6* scale, sy - 18 * scale, scale * 10, scale * 10, ":DSTRSystem/IMG/rangos/0.png", 0, 0, 0, tocolor(255, 255, 255,getElementAlpha(player)),false)
                    dxDrawColorText("[ ]\n"..getPlayerNameR(player).."", sx - w2, sy - offset3, sx, sy - offset, tocolor(0, 0, 0, getElementAlpha(player)), textscale * NAMETAG_TEXTSIZE, srfont, "center", "bottom", false, false, false, false)
                    dxDrawText("[ ]\n"..getPlayerName(player).."", sx, sy - offset, sx, sy - offset, tocolor(r, g, b, getElementAlpha(player)), textscale * NAMETAG_TEXTSIZE, srfont, "center", "bottom", false, false, false, true)
                    local drawX = sx - NAMETAG_WIDTH*scale/2
                    drawY = sy + offset
                    drawY2 = sy + offset2
                    drawnY = drawY + 15
                    local width, height = NAMETAG_WIDTH * scale, NAMETAG_HEIGHT * scale  
                    --Next the inner background
                     local team = getPlayerTeam(player)
                    if (team) then
                         r, g, b = getTeamColor( team )
                    else
                         r, g, b = getPlayerNametagColor(player)
                    end
                   
                    health = getElementHealth ( player )
                    health = math.max(health, 0)/100
                    local alphad = getElementAlpha(player)
                   
                    armor = getPedArmor( player )
                    armor = math.max(armor, 0)/100
                   
                    dxDrawImageSection(drawX, drawY, width, height, math.floor(256 - 256 * health), 0, 256, 16, "h1.png", 0, 0, 0, tocolor(r, g, b, alphad))
                    dxDrawImageSection(drawX, drawY, width, height, math.floor(256 - 256 * health), 0, 256, 16, "h2.png", 0, 0, 0, tocolor(255, 255, 255, alphad))
                    dxDrawImage(drawX - 1, drawY + 0.8, width + 2, height, "h3.png", 0, 0, 0, tocolor(255, 255, 255,alphad),false)
                   
                    if armor <= 0 then
                     
                     else
                     
                    dxDrawImageSection(drawX, drawY2, width, height, math.floor(256 - 256 * armor), 0, 256, 16, "h1.png", 0, 0, 0, tocolor(110, 110,110, alphad))
                    dxDrawImageSection(drawX, drawY2, width, height, math.floor(256 - 256 * armor), 0, 256, 16, "h2.png", 0, 0, 0, tocolor(255, 255, 255, alphad))
                    dxDrawImage(drawX - 1, drawY2 +0.8, width + 2, height, "h3.png", 0, 0, 0, tocolor(255, 255, 255,alphad),false)
                    end
                     --Armor Bar
                    --dxDrawImage(drawX, drawnY, virus * width, height, "images/bar.png", 0, 0, 0, tocolor(0,255,0,255), false)
                    --dxDrawImage(drawX, drawnY, width, height, "images/bas.png", 0, 0, 0, tocolor(255, 255, 255, 255), false)
                    --dxDrawImage(drawX, drawnY, width, height, "images/bas2.png", 0, 0, 0, tocolor(255, 255, 255, 255), false)
                   
                end
                break
            end
        end
    end
addEventHandler ( "onClientRender", g_Root, Nametags)
 
 
 
 
 
 
function nametagsChanger ()
    enabled = not enabled;
    if enabled then
    removeEventHandler("onClientRender", getRootElement(), Inf)  
    removeEventHandler("onClientRender", getRootElement(), Nametags)
  else
    addEventHandler("onClientRender", getRootElement(), Inf)
    addEventHandler("onClientRender", getRootElement(), Nametags)  
end 
end
bindKey( "F4", "up", nametagsChanger )
 
 
---------------THE FOLLOWING IS THE MANAGEMENT OF NAMETAGS-----------------
addEventHandler('onClientResourceStart', g_ResRoot,
    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<curve[1][1] then
        return curve[1][2]
    end
    -- Interp value
    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]
            -- 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 removeColorCoding ( name )
    return type(name)=='string' and string.gsub ( name, '#%x%x%x%x%x%x', '' ) or name
end
 
function getPlayerNameR ( player )
    return removeColorCoding ( getPlayerName ( player ) )
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
 
addEventHandler("onClientResourceStart", resourceRoot,
function ()
    setPedTargetingMarkerEnabled(false)
end
)
Link to comment
  • Recently Browsing   0 members

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