Hey, im trying to grab the LocalPlayer's steam avatar when PlayerAuthed gets ran. But it just puts a question mark for their avatar. I think it's because the player entity doesn't exist yet when PlayerAuthed gets run, so it doesn't know their avatar yet. Any ideas? thank you in advance.
[CODE]function DrawSteamAvatar()
local Avatar = vgui.Create( "AvatarImage", Panel )
Avatar:SetSize( 32, 32 )
Avatar:SetPos( 11, ScrH() - 134 )
Avatar:SetPlayer( LocalPlayer(), 32 )
end
hook.Add( "PlayerAuthed", "1943rphud", DrawSteamAvatar() )[/CODE]
Wait until the player is valid in a HUDPaint hook and then only create the avatar image ONCE.
[QUOTE=Robotboy655;47220214]Wait until the player is valid in a HUDPaint hook and then only create the avatar image ONCE.[/QUOTE]
How would i go about that? ( I know Lua but not a lot, sorry ) I know you probably don't want to, but you explain further on how to make a custom check under that hook, like how to set it up. Also, how would i only create the avatar once?
EDIT:
Here, i tried it out, it's probably not correct, but i gave it a shot.
[CODE]function HUDValidCheck()
if LocalPlayer():IsValid() then
local Avatar = vgui.Create( "AvatarImage", Panel )
Avatar:SetSize( 32, 32 )
Avatar:SetPos( 11, ScrH() - 134 )
Avatar:SetPlayer( LocalPlayer(), 32 )
end
end
hook.Add( "HUDPaint", "1943rphud", HUDValidCheck() )[/CODE]
[QUOTE=Austin1346;47220415]How would i go about that? ( I know Lua but not a lot, sorry ) I know you probably don't want to, but you explain further on how to make a custom check under that hook, like how to set it up. Also, how would i only create the avatar once?
EDIT:
Here, i tried it out, it's probably not correct, but i gave it a shot.
[/QUOTE]
[CODE]
local avatar
function HUDValidCheck()
if IsValid( LocalPlayer() ) && !IsValid( avatar ) then
avatar= vgui.Create( "AvatarImage" )
avatar:SetSize( 32, 32 )
avatar:SetPos( 11, ScrH() - 134 )
avatar:SetPlayer( LocalPlayer(), 32 )
end
end
hook.Add( "HUDPaint", "1943rphud", HUDValidCheck )[/CODE]
Here, this should work, learn from your mistakes.
You might wanna add "elseif( IsValid( avatar)) then " to update the position or size of you need that.
[lua]local Avatar
function HUDValidCheck()
if !LocalPlayer():IsValid() then return end -- don't bother doing ANYTHING unless the player is valid
if !Avatar then
Avatar = vgui.Create( "AvatarImage", Panel )
Avatar:SetSize( 32, 32 )
Avatar:SetPos( 11, ScrH() - 134 )
Avatar:SetPlayer( LocalPlayer(), 32 )
end
-- use Avatar here, draw the rest of the hud
end
hook.Add( "HUDPaint", "1943rphud", HUDValidCheck() )[/lua]
Edit: ninja'd, of course. :rolleyes:
use Robotboy's solution, it's better.
Don't ever use ent:IsValid() in such, or any case really, use IsValid( ent )
[QUOTE=Robotboy655;47220592]Don't ever use ent:IsValid() in such, or any case really, use IsValid( ent )[/QUOTE]
Yeah, I forgot, was basically just recycling as much as I could from his code.
*feels ashamed*
[QUOTE=Robotboy655;47220475][CODE]
local avatar
function HUDValidCheck()
if IsValid( LocalPlayer() ) && !IsValid( avatar ) then
avatar= vgui.Create( "AvatarImage" )
avatar:SetSize( 32, 32 )
avatar:SetPos( 11, ScrH() - 134 )
avatar:SetPlayer( LocalPlayer(), 32 )
end
end
hook.Add( "HUDPaint", "1943rphud", HUDValidCheck )[/CODE]
Here, this should work, learn from your mistakes.
You might wanna add "elseif( IsValid( avatar)) then " to update the position or size of you need that.[/QUOTE]
Okay, so I have this running in the HUDPaint hook and it's not drawing the avatar at all. I tooled around with it for about 10 minutes and couldn't figure out why.
EDIT:
It's creating the avatar but it's creating it every time hudpaint is called. How do i call it just once?
EDIT... Again:
Alright, this time it's fixed, as far as i know. Thanks for leading me in the right direction guys. :dance:
[CODE]local Avatar
function HUDValidCheck()
if !LocalPlayer():IsValid() then
return
end
if !Avatar then
Avatar = vgui.Create( "AvatarImage", Panel )
Avatar:SetSize( 32, 32 )
Avatar:SetPos( 11, ScrH() - 134 )
Avatar:SetPlayer( LocalPlayer(), 32 )
end
end[/CODE]
[QUOTE=Robotboy655;47220592]Don't ever use ent:IsValid() in such, or any case really, use IsValid( ent )[/QUOTE]
LocalPlayer() is never not an entity so why? I also don't understand why this needs to go into a HUDPaint hook. Shouldn't there be a hook that tells when the player is initialized, like InitPostEntity or something? I'm going to do some tests with SysTime() and see.
[code]
CreateTeams 46.026282600821
PreGamemodeLoaded 46.026320635112
CloseDermaMenus 46.026395194397
ForceDermaSkin 46.026516240039
PopulateMenuBar 46.029385414151
PopulateToolMenu 46.029469632939
PostReloadToolsMenu 46.161814477179
OnGamemodeLoaded 46.179864766964
PostGamemodeLoaded 46.17990038638
Initialize 46.179912762618
DrawOverlay 46.333332226515
Tick 46.336190231828
HUDShouldDraw 46.337098225066
OnEntityCreated 51.758895496257
InitPostEntity 53.31377746921
ShouldDrawLocalPlayer 53.320028072929
StartCommand 53.320150627868
CreateMove 53.320168135716
CalcView 53.332121770104
CalcViewModelView 53.332342731224
AdjustMouseSensitivity 53.332383482251
CalcMainActivity 53.332416384931
TranslateActivity 53.332454721082
UpdateAnimation 53.332562786766
NetworkEntityCreated 53.332663909684
Redownloading all lightmaps
PreRender 53.349922120261
RenderScene 53.350167833857
DrawMonitors 53.350193190051
PreDrawSkyBox 53.350230922482
SetupSkyboxFog 53.350246921034
PostDraw2DSkyBox 53.353009840618
PreDrawOpaqueRenderables 53.355592248249
PostDrawOpaqueRenderables 53.355621226757
PreDrawTranslucentRenderables 53.355638130886
PostDrawTranslucentRenderables 53.355662883362
PostDrawSkyBox 53.358400144893
NeedsDepthPass 53.358690835547
SetupWorldFog 53.358708343395
DrawPhysgunBeam 53.359478990582
PreDrawViewModel 53.367053549867
PostDrawViewModel 53.367276624004
PreDrawEffects 53.36742242212
RenderScreenspaceEffects 53.367460456411
PreDrawHalos 53.367490340497
PostDrawEffects 53.367507546486
PreDrawHUD 53.367519620865
PostDrawHUD 53.36757214441
PostRenderVGUI 53.367629497706
PostRender 53.367649722289
Think 53.480239676407
InputMouseApply 53.481239434919
SetupMove 53.507712207196
PlayerTick 53.507758391693
Move 53.507837780729
FinishMove 53.507894228447
PlayerPostThink 53.507919282782
DoAnimationEvent 53.513245894711
HUDPaintBackground 53.515668920551
HUDPaint 53.515813813089
HUDDrawTargetID 53.515860903163
HUDDrawPickupHistory 53.515926406665
DrawDeathNotice 53.515960516783
HUDDrawScoreBoard 53.516042320695
PlayerButtonDown 63.855872675682
PlayerButtonUp 63.890642960638
[/code]
InitPostEntity works fine. Just tested it. I also tried the Initialize hook, but it didn't load the avatar correctly.
[lua]
local function HUDValidCheck()
local Avatar = vgui.Create( "AvatarImage", Panel )
Avatar:SetSize( 32, 32 )
Avatar:SetPos( 11, ScrH() - 134 )
Avatar:SetPlayer( LocalPlayer(), 32 )
end
hook.Add( "InitPostEntity", "1943rphud", HUDValidCheck )
[/lua]
Those of you rating me, prove me wrong.
[QUOTE=thegrb93;47220751]
Those of you rating me, prove me wrong.[/QUOTE]
[lua]
local ply = LocalPlayer()
hook.Add( "Think", "LocalPlayerIsntAlwaysValid", function()
print( IsValid( ply ) )
end )
[/lua]
Why is nobody using panel:ParentToHUD() function?
[QUOTE=meharryp;47223188][lua]
local ply = LocalPlayer()
hook.Add( "Think", "LocalPlayerIsntAlwaysValid", function()
print( IsValid( ply ) )
end )
[/lua][/QUOTE]
He never said that it was always valid, he said it's always AN ENTITY:
[QUOTE=thegrb93;47220751]LocalPlayer() is never not an entity so why?[/QUOTE]
It's true that you'll always be able to run LocalPlayer():IsValid(). I still believe it's good practice to use the global IsValid function. While it's fine not to for entities, for panels (and maybe other objects) certain methods will return nil rather than a NULL userdata. You also can't rely on mod-makers to abide to using NULL rather than nil.
It's nice to be able to use the same methods for every situation.
Sorry, you need to Log In to post a reply to this thread.