player class function doesn't work on a certain case

hi everybody !

this function draw a icon over the head of each players ( in a hook “HUDPaint” )

there a problem when i use " player_manager.RunClass() " in this function, he doesn’t work
but when i use this in an another file like shared.lua he works …

playerhud.lua


AddCSLuaFile()

if CLIENT then

	local function DrawThePlayerHUD()
		for k,v in pairs(player.GetAll()) do
		
			if v:GetPos():Distance(LocalPlayer():GetPos()) <= 100000 then
				if v:Alive() then

					-- Some stuff .... 
					
					print( player_manager.GetPlayerClass(v) ) -- this print fine "player_nobby"
					print( player_manager.RunClass( v, "getGradeIcon" ) )  -- doesnt work, print a empty string

					surface.SetTexture( surface.GetTextureID("gradeicons/nobby") ) -- but this works fine
					surface.SetDrawColor(Color(255,255,255,255))
					surface.DrawTexturedRect(XPos - 80,YPos,CSize,CSize)
					
					draw.DrawText(v:Name(),"Trebuchet24",XPos,YPos-20, Color(PlyClr.x,PlyClr.y,PlyClr.z,alpha) ,TEXT_ALIGN_CENTER)
					draw.DrawText(v:Health() ,"Trebuchet24",XPos+10,YPos+5, Color(PlyClr.x,PlyClr.y,PlyClr.z,alpha) ,TEXT_ALIGN_CENTER)


				end
			end
			
		end

	end
	hook.Add("HUDPaint","nameitHUD",DrawThePlayerHUD)

end


The player class : (everything works in shared.lua




AddCSLuaFile()

-- Class nobby :
DEFINE_BASECLASS( "player_default" )

local PLAYER = {} 

--class attributes :
PLAYER.WalkSpeed 			= 160
PLAYER.RunSpeed				= 160
PLAYER.playerModel = "models/player/Group03/Male_03.mdl"
PLAYER.weapons = {"weapon_pistol","hogs_rifle","hogs_grenade"}
PLAYER.gradeIcon = "gradeicons/nobby"


--Methods :
PLAYER.setPlayerModel = function( tbl )
	local ply  = tbl.Player
	ply:SetModel(PLAYER.playerModel)
end

PLAYER.getClassWeapons = function()
	return PLAYER.weapons
end

PLAYER.getGradeIcon = function()
	return PLAYER.gradeIcon
end


player_manager.RegisterClass( "player_nobby", PLAYER, "player_default" )



so i dont know what is wrong …

(also i know how poo works in C# , but not at all about lua poo)

thanks :slight_smile:

[lua]-- Your code:
PLAYER.getGradeIcon = function()
return PLAYER.gradeIcon
end

– Fixed code:
PLAYER.getGradeIcon = function(ply)
return ply.gradeIcon
end

– More self-descriptive code (works the same as the fixed code above):
function PLAYER:getGradeIcon()
return self.gradeIcon
end[/lua]

The PLAYER table doesn’t exist when functions run.

[editline]16th September 2016[/editline]

I’m pretty sure that poo comes out of your butt no matter where you’re from

thanks,

but console say :


[ERROR] .../gamemode/playernameshud.lua:38: attempt to call method 'getGradeIcon' (a nil value)


playerclass :



PLAYER.gradeIcon = "gradeicons/nobby"
function PLAYER:getGradeIcon()
	return self.gradeIcon
end


hudpaint :



for k,v in pairs(player.GetAll()) do
    print( v:getGradeIcon() )
end


also tried to print this somewhere else but i have the same error

do i did something wrong ?

I think you still need to use RunClass. I’m a bit confused about this myself to be honest.

player_manager.RunClass still return a empty string :confused:

– EDIT –


print( type(player_manager.RunClass(ply, "getGradeIcon")) )

correction , its not a string its “no value”