'~DaLesTe^' Posted September 27, 2016 Share Posted September 27, 2016 (edited) Spoiler local drawDistance = 100.0 g_StreamedInPlayers = {} function drawHPBar( x, y, v, d) if(v < 0.0) then v = 0.0 elseif(v > 100.0) then v = 100.0 end dxDrawRectangle(x - 36, y + 10, 84, 7, tocolor ( 0, 0, 0, 255-d )) dxDrawRectangle(x - 35, y + 11, v/1.21 , 5.5, tocolor ( (200-v) * 2.55, (v * 5.55), 0, 255-d )) end function drawArmourBar( x, y, v, d) if(v < 0.0) then v = 0.0 elseif(v > 100.0) then v = 100.0 end dxDrawRectangle(x - 36, y + 8, 84, 7, tocolor ( 0, 0, 0, 255-d )) dxDrawRectangle(x - 35, y + 9, v/1.21 , 5.5, tocolor ( 200, 255, 250, 255-d )) end function drawHud() -- > 573 = baixo healthColor = tocolor (0,0,0,255) healthbgColor = tocolor (255,151,0,127) healthfgColor = tocolor (255,151,0,185) sx,sy = guiGetScreenSize () healthx = sx/800*683 healthy = sy/600*89 healthxoverlay = sx/800*685 healthyoverlay = sy/600*91 vehiclehealthx = sx/800*619 vehiclehealthy = sy/600*169 vehiclehealthxoverlay = sx/800*621 vehiclehealthyoverlay = sy/600*171 if (not normalhealthbar) then local health = getElementHealth(getLocalPlayer()) local armour = getPedArmor(getLocalPlayer()) local rate = 500 / getPedStat(getLocalPlayer(),24) if (getElementHealth(getLocalPlayer()) == 0) then if (getTickCount() - visibleTick < 500) then local healthRelative = health*rate/100 local v = health*rate dxDrawRectangle (healthx, healthy, 76, 12, healthColor, false) dxDrawRectangle (healthxoverlay, healthyoverlay, 62, 8, tocolor((100-v) * 2.55, (v * 2.55), 0, 127), false) dxDrawRectangle (healthxoverlay, healthyoverlay, 62*healthRelative, 8, tocolor((100-v) * 2.55, (v * 2.55), 0, 185), false) else if(getTickCount() - visibleTick >= 1000) then visibleTick = getTickCount() end end else local healthRelative = health*rate/100 local v = health*rate dxDrawRectangle (healthx, healthy, 76, 12, healthColor, false) dxDrawRectangle (healthxoverlay, healthyoverlay, 72, 8, tocolor((100-v) * 2.55, (v * 2.55), 0, 127), false) dxDrawRectangle (healthxoverlay, healthyoverlay, 72*healthRelative, 8, tocolor((100-v) * 2.55, (v * 2.55), 0, 185), false) end end end function un:O(text) return string.gsub(text, "(#%x%x%x%x%x%x)", function(colorString) return "" end) end function onClientRender( ) --drawHud() local cx, cy, cz, lx, ly, lz = getCameraMatrix() for k, player in pairs(g_StreamedInPlayers) do if isElement(player) and isElementStreamedIn(player) then local vx, vy, vz = getPedBonePosition(player, 8) local dist = getDistanceBetweenPoints3D(cx, cy, cz, vx, vy, vz ) if dist < drawDistance then if( isLineOfSightClear(cx, cy, cz, vx, vy, vz, true, false, false) ) then local x, y = getScreenFromWorldPosition (vx, vy, vz + 0.3) if(x and y) then local name = getPlayerName(player) --local w = dxGetTextWidth(name, 1, "default-bold") --local h = dxGetFontHeight(1, "default-bold") if getPlayerTeam(player) then local pR, pG, pB = getTeamColor(getPlayerTeam(player)) local playertag = getElementData(player,"gang.tag") or "" local finaltag = rgb2hex(pR,pG,pB) .. "" .. playertag local w = dxGetTextWidth(rgb2hex(pR,pG,pB) .. "" .. playertag .. "" .. name .. " (ID:" .. getPlayerID(player) .. ")", 1.5, "default-bold") local h = dxGetFontHeight(1.5, "default-bold") local tw = dxGetTextWidth(getTeamName(getPlayerTeam(player)), 1, "default-bold") local th = dxGetFontHeight(1, "default-bold") --dxDrawText(finaltag .. "" .. un:O(name) .. " (ID:" .. getPlayerID(player) .. ")", x + 1 - 30 - w / 6,y - h - 6 + 1, w, h, tocolor(0,0,0), 1, "default-bold", true, true, true, true) dxDrawColoredText(finaltag .. "" .. name .. " (ID:" .. getPlayerID(player) .. ")", x - 30 - w / 6,y - h - 6, w, h, tocolor(getPlayerNametagColor(player)),1.5, "default-bold") dxDrawColoredText(rgb2hex(pR,pG,pB) .."" .. getTeamName(getPlayerTeam(player)), x - 30 - tw / 6,y - th - 30, tw, th, tocolor(getPlayerNametagColor(player)),1, "default-bold") else local w = dxGetTextWidth(name .. "(ID:" .. getPlayerID(player) .. ")", 1, "default-bold") local h = dxGetFontHeight(1, "default-bold") --dxDrawText(un:O(name) .. "(ID:" .. getPlayerID(player) .. ")", x + 1 - 30 - w / 6,y - h - 6 + 1, w, h, tocolor(0,0,0), 1, "default-bold") dxDrawColoredText(name .. "(ID:" .. getPlayerID(player) .. ")", x - 30 - w / 6,y - h - 6, w, h, tocolor(getPlayerNametagColor(player)), 1, "default-bold") end local health = getElementHealth ( player ) local armour = getPedArmor ( player ) if(health > 0.0) then local rate = 500 / getPedStat(player,24) drawHPBar(x, y-6.0, health*rate, dist) if(armour > 0.0) then drawArmourBar(x, y-12.0, armour, dist) end end end end end else table.remove(g_StreamedInPlayers, k) end end end addEventHandler("onClientRender", root, onClientRender) function onClientElementStreamIn() if getElementType(source) == "player" then if source ~= getLocalPlayer() then setPlayerNametagShowing(source, false) table.insert(g_StreamedInPlayers, source) end end end addEventHandler("onClientElementStreamIn", root, onClientElementStreamIn) function onClientResourceStart(startedResource) visibleTick = getTickCount() counter = 0 normalhealthbar = false local players = getElementsByType("player") for k, v in pairs(players) do if isElementStreamedIn(v) then if v ~= getLocalPlayer() then setPlayerNametagShowing(v, false) table.insert(g_StreamedInPlayers, v) end end end end addEventHandler("onClientResourceStart", resourceRoot, onClientResourceStart ) local screen_width, screen_height = guiGetScreenSize() function dxDrawColoredText(text, left, top, right, bottom, color, scale, font, alignX, alignY, clip, wordBreak, postGUI) -- Making them optional. right = right or screen_width bottom = bottom or screen_height while(left < 0) do left = screen_width - math.abs(left) end while(top < 0) do top = screen_height - math.abs(top) end while(right < 0) do right = screen_width - math.abs(right) end while(bottom < 0) do bottom = screen_height - math.abs(bottom) end if(right > screen_width)then right = screen_width end if(bottom > screen_height)then bottom = screen_height end color = color or tocolor(255, 255, 255, 200) scale = scale or 1 font = font or "default" alignX = alignX or "left" alignY = alignY or "top" clip = clip or false wordBreak = wordBreak or false postGUI = postGUI or true local alpha = intToAlpha(color) local text_width = 0 local offset = 0 local text_height = dxGetFontHeight(scale, font) local TEXT_WIDTH = dxGetTextWidth(text:gsub("#%x%x%x%x%x%x", ""), scale, font) local off = -TEXT_WIDTH local width = 0 local height = 0 if(alignX == "center")then left = left + width/2 - TEXT_WIDTH/2 end if(alignX == "right")then left = left + width - TEXT_WIDTH end if(alignY == "center")then top = top + height/2 - text_height/2 end if(alignY == "bottom")then top = top + height - text_height end alignX = "left" alignY = "top" -- 0 index ? local col1, col2 = string.find(text, "#%x%x%x%x%x%x") if col1 ~= nil then col1 = col1-1 end -- draw text with the color we sent until we find hexadecimal code. for i = 1, col1 or string.len(text) do text_width = dxGetTextWidth(string.sub(text, i, i), scale, font) dxDrawText(string.sub(text, i, i), left + offset, top, right-off+offset, bottom, color, scale, font, alignX, alignY, clip, wordBreak, postGUI) offset = offset + text_width end while(string.find(text, "#%x%x%x%x%x%x", i))do local hex1, hex2 = string.find(text, "#%x%x%x%x%x%x") local r, g, b, a = getColorFromString(string.sub(text, hex1, hex2)) text = string.sub(text, hex2 + 1) hex1, hex2 = string.find(text, "#%x%x%x%x%x%x") if hex1 ~= nil then hex1 = hex1-1 end for i = 1, hex1 or string.len(text) do text_width = dxGetTextWidth(string.sub(text, i, i), scale, font) dxDrawText(string.sub(text, i, i), left + offset, top, right-off+offset, bottom, tocolor(r, g, b, alpha), scale, font, alignX, alignY, clip, wordBreak, postGUI) offset = offset + text_width end end end function intToAlpha(color) local a = 16777216 local red, green, blue, alpha = 0, 0, 0, 0 local ap = 1 if(color < 0)then color = 2147483648 + (-color) alpha = 383 ap = -ap end while(color >= a)do alpha = alpha + ap color = color - a end return alpha end function getPlayerFromID(id) return call(getResourceFromName("game_id"), "getPlayerFromID", tonumber(id)) end function getPlayerID(player) return getElementData(player,"id") end function rgb2hex(r,g,b) return string.format("#%02X%02X%02X", r,g,b) end When a player change the skin several times this script causes lag. Could you tell me what causes this? Edited September 27, 2016 by '~DaLesTe^' Link to comment
Dealman Posted September 27, 2016 Share Posted September 27, 2016 Oh good heavens... Oh well, first for all try and narrow it down a bit so you know what function causes the lagging. Also are you sure this is the right script? I can't seem to find anything obvious to do with skin changing - but rather mostly about drawing HUD elements? Link to comment
'~DaLesTe^' Posted September 27, 2016 Author Share Posted September 27, 2016 21 minutes ago, Dealman said: Oh good heavens... Oh well, first for all try and narrow it down a bit so you know what function causes the lagging. Also are you sure this is the right script? I can't seem to find anything obvious to do with skin changing - but rather mostly about drawing HUD elements? It is how to create several DrawRectangle when changing skin. Link to comment
Captain Cody Posted September 29, 2016 Share Posted September 29, 2016 From what I know when a model id changes it streams out / in. So there could be an issue with it adding the player to the table multiple times. Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now