Hi!
I am currently working on a hud for DarkRP, and i basically got 2 old huds, mashed them together, and fixed their code for the new gmod.
But i am having a problem that has intrigued me.
For some reason, my hud tends to write %s on it after the text. For example:
Salary: %s%s$12
here is a picture
[url]http://i.imgur.com/4jbHDkM.png[/url]
here's the code:
[lua]
/*---------------------------------------------------------------------------
HUD ConVars
---------------------------------------------------------------------------*/
local function formatNumber(n)
n = tonumber(n)
if (!n) then
return 0
end
if n >= 1e14 then return tostring(n) end
n = tostring(n)
sep = sep or ","
local dp = string.find(n, "%.") or #n+1
for i=dp-4, 1, -3 do
n = n:sub(1, i) .. sep .. n:sub(i+1)
end
return n
end
local ConVars = {}
local HUDWidth
local HUDHeight
CreateClientConVar("weaponhud", 0, true, false)
CUR = "$"
local flat = Material("vgui/white.vtf")
local sin,cos,rad = math.sin,math.cos,math.rad --it slightly increases the speed.
local HUDAlpha = 245
local CirclePasses = 50
local PortraitScale = ScrW() / 14
local CircleMargin = 0
local HealthCircleMargin = 7
local HealthCircleWidth = 20
local PortraitPos = Vector(PortraitScale + 20 , ScrH() - PortraitScale - CircleMargin )
DisplayPortrait = true
local MarginCircle = {}
for i=1,CirclePasses do
MarginCircle[i] = {x = PortraitPos.x + cos(rad(i*360)/CirclePasses)*PortraitScale,y = PortraitPos.y + sin(rad(i*360)/CirclePasses)*PortraitScale}
end
local InnerCircle = {}
for i=1,CirclePasses do
InnerCircle[i] = {x = PortraitPos.x + cos(rad(i*360)/CirclePasses)*(PortraitScale - HealthCircleMargin),y = PortraitPos.y + sin(rad(i*360)/CirclePasses)*(PortraitScale - HealthCircleMargin)}
end
local HungerCircleWidth = PortraitScale - HealthCircleWidth - HealthCircleMargin *2
local HungerCircle = {}
for i=1,CirclePasses do
HungerCircle[i] = {x = PortraitPos.x + cos(rad(i*360)/CirclePasses)* (HungerCircleWidth),y = PortraitPos.y + sin(rad(i*360)/CirclePasses)* (HungerCircleWidth)}
end
local MarginCircle2 = {}
for i=1,CirclePasses do
MarginCircle2[i] = {x = PortraitPos.x + cos(rad(i*360)/CirclePasses)*(PortraitScale- HealthCircleWidth),y = PortraitPos.y + sin(rad(i*360)/CirclePasses)*(PortraitScale- HealthCircleWidth)}
end
local PortraitModel
local PortraitModelView
local MoneyIcon = Material("icon16/money.png")
local WalletIcon = Material("icon16/briefcase.png")
local JobIcon = Material("icon16/user_suit.png")
local WantedStar = Material("icon16/user_suit.png")
hook.Add("InitPostEntity", "CircularHUDInitEnts", function()
PortraitModel = ClientsideModel(LocalPlayer():GetModel(), RENDERGROUP_OPAQUE)
PortraitModelView = PositionSpawnIcon( PortraitModel, Vector(0,0,0) )
PortraitModel:SetNoDraw( true )
PortraitModel:SetPos(Vector(0,0,0))
timer.Create( "RefreshPortrait", 1, 0, function()
if PortraitModel:GetModel() != LocalPlayer():GetModel() then
PortraitModel = ClientsideModel(LocalPlayer():GetModel(), RENDERGROUP_OPAQUE)
PortraitModelView = PositionSpawnIcon( PortraitModel, Vector(0,0,0) )
PortraitModel:SetNoDraw( true )
PortraitModel:SetPos(Vector(0,0,0))
end
end)
end)
function DrawCircularCustomHud()
LocalPlayer().DarkRPVars = LocalPlayer().DarkRPVars or {}
LocalPlayer().DarkRPVars.Energy = LocalPlayer().DarkRPVars.Energy or 0
surface.SetMaterial(flat)
LocalPlayer().DarkRPVars = LocalPlayer().DarkRPVars or {}
local Salary = LANGUAGE.salary .. CUR .. (LocalPlayer().DarkRPVars.salary or 0)
local Job = LANGUAGE.job .. (LocalPlayer().DarkRPVars.job or "")
local Wallet = LANGUAGE.wallet .. CUR .. (formatNumber(LocalPlayer().DarkRPVars.money) or 0)
--Armor bar
/*
surface.SetDrawColor( 0, 0, 255, HUDAlpha )
surface.DrawRect( PortraitScale*2, ScrH() - PortraitScale - CircleMargin, ScrW()/2 - PortraitScale*2 + PortraitScale*4, PortraitScale * 0.48 + CircleMargin / 2 )
*/
--Black Bar underneath the Circles
surface.SetDrawColor( 0,0,0, HUDAlpha )
surface.DrawRect(PortraitScale*2, ScrH() - PortraitScale - CircleMargin, ScrW()/2 - PortraitScale*2 + PortraitScale*4, PortraitScale * 0.48 + CircleMargin / 2 )
if DisplayPortrait then
--render.SetScissorRect(0,0, ScrW(), ScrH() - PortraitScale * 0.48 - CircleMargin, true)
--Circle behind everything
surface.SetDrawColor( 0,0,0, HUDAlpha )
surface.DrawPoly( MarginCircle )
--Grey Circle Behind Health Bar
surface.SetDrawColor( 50,50,50, HUDAlpha )
surface.DrawPoly( InnerCircle )
--Black Circle Behind Hunger Bar
surface.SetDrawColor( 0,0,0, HUDAlpha )
surface.DrawPoly( HungerCircle )
--Character Portrait
render.ClearStencil()
render.SetStencilEnable( true )
render.SetStencilFailOperation( STENCILOPERATION_KEEP )
render.SetStencilZFailOperation( STENCILOPERATION_REPLACE )
render.SetStencilPassOperation( STENCILOPERATION_REPLACE )
render.SetStencilCompareFunction( STENCILCOMPARISONFUNCTION_ALWAYS )
render.SetStencilReferenceValue( 1 )
surface.SetDrawColor( 0,46,99, HUDAlpha )
surface.DrawPoly( HungerCircle )
surface.SetDrawColor( 0,0,0, 255 )
render.SetScissorRect(0,0, ScrW(), PortraitPos.y - HungerCircleWidth + (HungerCircleWidth * 2 * (1-math.Clamp(math.ceil(LocalPlayer().DarkRPVars.Energy), 0, 100)/100)) , true)
surface.DrawPoly( HungerCircle )
render.SetScissorRect(0,0, ScrW(), PortraitPos.y - HungerCircleWidth + (HungerCircleWidth * 2 * (1-math.Clamp(math.ceil(LocalPlayer().DarkRPVars.Energy), 0, 100)/100)) , false)
render.SetStencilCompareFunction( STENCILCOMPARISONFUNCTION_EQUAL )
render.SetStencilPassOperation( STENCILOPERATION_REPLACE )
--Hunger Display
PortraitModel = ClientsideModel(LocalPlayer():GetModel(), RENDERGROUP_OPAQUE)
PortraitModelView = PositionSpawnIcon( PortraitModel, Vector(0,0,0) )
cam.Start3D( PortraitModelView.origin, PortraitModelView.angles, PortraitModelView.fov, PortraitPos.x - HungerCircleWidth, PortraitPos.y -HungerCircleWidth , HungerCircleWidth*2, HungerCircleWidth*2, PortraitModelView.origin.znear, PortraitModelView.zfar )
cam.IgnoreZ( true )
render.SuppressEngineLighting( true )
render.SetLightingOrigin( PortraitModel:GetPos() )
PortraitModel:DrawModel()
render.SuppressEngineLighting( false )
cam.IgnoreZ( false )
cam.End3D()
render.SetStencilEnable( false )
--Health Display
surface.SetDrawColor( 0, 127, 14, 255 )
if LocalPlayer():Health() > 0 then
for a = 0, math.Clamp( LocalPlayer():Health() / (100/CirclePasses), 0, CirclePasses - 1 ) do
surface.DrawTexturedRectRotated( PortraitPos.x + cos( rad( -a * 270/CirclePasses + 225 ) ) * (PortraitScale - HealthCircleWidth/2 - HealthCircleMargin), PortraitPos.y - sin( rad( -a * 270/CirclePasses + 225) ) * (PortraitScale - HealthCircleWidth/2 - HealthCircleMargin), HealthCircleWidth, 12 + sin( rad(360/CirclePasses) ) * HealthCircleWidth * 2, -a * 270/CirclePasses + 225 )
end
end
--Armor Display
surface.SetDrawColor( 0, 00, 255, 255 )
if LocalPlayer():Armor() > 0 then
for a = 0, math.Clamp( LocalPlayer():Armor() / (100/CirclePasses), 0, CirclePasses - 1 ) do
surface.DrawTexturedRectRotated( PortraitPos.x + cos( rad( -a * 270/CirclePasses + 225 ) ) * (PortraitScale - HealthCircleWidth/2 - HealthCircleMargin), PortraitPos.y - sin( rad( -a * 270/CirclePasses + 225) ) * (PortraitScale - HealthCircleWidth/2 - HealthCircleMargin), HealthCircleWidth*0.8, 12 + sin( rad(360/CirclePasses) ) * HealthCircleWidth * 2, -a * 270/CirclePasses + 225 )
end
end
--ren
That's because LANGUAGE.salary has the %s in it, you'll need to use string.format to replace %s with your "CUR .. (LocalPlayer().DarkRPVars.salary or 0)"
[QUOTE=Robotboy655;42046359]That's because LANGUAGE.salary has the %s in it, you'll need to use string.format to replace %s with your "CUR .. (LocalPlayer().DarkRPVars.salary or 0)"[/QUOTE]
Oh thank you!
Ill return with progress in 8-9 hours
Sorry, you need to Log In to post a reply to this thread.