Trying to display text above entity (Garrysmod - lua)

So, I’m trying to display a text above a entity. Kinda like the drug mods used in DarkRP.
But the code i created won’t work.
No text appears.
I get these errors :



ERROR: Trying to derive entity basic_entity_tutorial from non existant entity base_gmodentity!


Here’s my code :

File name : basic_entity_tutorial.lua


AddCSLuaFile()

ENT.Type = "anim"
ENT.Base = "base_gmodentity"

ENT.PrintName = "Basic Entity"
ENT.Author = "Happy Crayfish"
ENT.Purpose = "Does Something"
ENT.Instructions = "Do something with me"

ENT.Spawnable = true
ENT.AdminSpawnable = true

function ENT:Initialize()
	
	self:SetModel("models/props_c17/consolebox01a.mdl")
	self:SetHealth(10)
	self:SetSolid(2)
	self:SetMoveType(MOVETYPE_VPHYSICS)
	
	local phys = self:GetPhysicsObject()
	if (phys:IsValid()) then
		phys:Wake()
	end
	
end


function ENT:Draw()
	
	self:DrawModel()
	
	surface.CreateFont( "TheDefaultSettings", {
		font = "Arial",
		size = 500,
		weight = 500,
		blursize = 0,
		scanlines = 0,
		antialias = true,
		underline = false,
		italic = false,
		strikeout = false,
		symbol = false,
		rotary = false,
		shadow = false,
		additive = false,
		outline = false,
	} )
	
	cam.Start3D2D( Vector(0, 0, 0), Angle(0, 0, 0), 1 )
        surface.DrawText("Your Mother", "TheDefaultSettings", 0, 0, Color(255, 255, 255), TEXT_ALIGN_CENTER )
    cam.End3D2D()
	
end


function ENT:Use(ply)
	
	if (ply:IsPlayer()) then
		ply:Kill()
		MsgN("Good job... You killed yourself!")
	end
	
end

And here’s the init.lua file : (posting the required parts only)


hook.Add("ShowTeam", "SpawnOurEnt", function(ply)
	
	local ent = ents.Create("basic_entity_tutorial")
	ent:SetPos(ply:GetPos() +Vector(0, 0, 100))
	ent:Spawn()
        ent:Activate()
	
end)

This is also my first time posting here. Sorry if i did something wrong.

Putting Vector( 0, 0, 0 ) will show it on 0, 0, 0 on the map.

As Neth stated, putting in Vector( 0, 0, 0 ) will put it on the map, so you’ll want to replace it with self:GetPos().


cam.Start3D2D( self:GetPos(), Angle(0, 0, 0), 1 )

Also, the font you’re creating should NEVER be done in a HUD or Draw function, since these are called every frame and will make your game/server become a very sad one. It’d be better to define it outside of the function, but even better if you kept all font creation to a file, if it’s a gamemode/addon.

Finally, to solve your error, given you followed my tutorial, and I fucked up in it, the base entity is actually just ‘base_entity’


ENT.Base	=	"base_entity";

So, i changed the position of it, went into garrysmod, spawned the entity but no text anywhere.
I also changed my font size to 12 instead of 500.
EDIT :
I fixed the CreateFont error. But there is still no text anywhere

However my other error was solved! :smiley:

you can’t use surface/draw functions outside of a draw hook

So, my draw function now looks like this :
(with a doNotCreateFontAgain variable online 1 of the file)


function ENT:Draw()
	
	if (doNotCreateFontAgain == false) then
	
		surface.CreateFont( "TheDefaultSettings", {
			font = "Arial",
			size = 12,
			weight = 500,
			blursize = 0,
			scanlines = 0,
			antialias = true,
			underline = false,
			italic = false,
			strikeout = false,
			symbol = false,
			rotary = false,
			shadow = false,
			additive = false,
			outline = false,
		} )
		doNotCreateFontAgain = true
		
	end
	
	self:DrawModel()
	
	cam.Start3D2D( self:GetPos(), Angle(0, 0, 0), 1 )
        surface.DrawText("Text", "TheDefaultSettings", 0, 0, Color(255, 255, 255), TEXT_ALIGN_CENTER )
    cam.End3D2D()
	
end

But there is still no text anywhere. :confused:

Why aren’t you just putting the font creation outside of the function? You’re making it hard for yourself.

It wouldn’t work, so i just did it like this instead… :3