Edit My entity?

im working on some measley Drugs for a new system im making. so far, none of my code has worked except for setting the model and setting the health and the spark-effect when destroyed.
this is supposed to give you +100 health, decreasing slowly, a small speed boost, and some more jumping power.

PLEASE. tell me what im doing wrong with this!
cl_init.lua
[lua]
include(‘shared.lua’)

function ENT:Draw()
self:DrawModel() – Draw the model.
end
[/lua]
init.lua
[lua]
AddCSLuaFile( “cl_init.lua” ) – Make sure clientside
AddCSLuaFile( “shared.lua” ) – and shared scripts are sent.

include(‘shared.lua’)

function ENT:SpawnFunction(ply, tr) – Spawn function needed to make it appear on the spawn menu
if (!tr.HitWorld) then return end

local ent = ents.Create("normaldrugs") -- Create the entity
ent:SetPos(tr.HitPos + Vector(0, 0, 50)) -- Set it to spawn 50 units over the spot you aim at when spawning it
ent:Spawn() -- Spawn it

return ent -- You need to return the entity to make it work

end

function ENT:Initialize()

self:SetModel( "models/props_junk/glassjug01.mdl" )
self:PhysicsInit( SOLID_VPHYSICS )      
self:SetMoveType( MOVETYPE_VPHYSICS )   
self:SetSolid( SOLID_VPHYSICS )         
local phys = self:GetPhysicsObject()
if (phys:IsValid()) then
	phys:Wake()
end
self.damage = 10

end

function Drugged( ply )
ply:SetJumpPower(300)
local IDSteam = string.gsub(ply:SteamID(), “:”, “”)
if not timer.IsTimer(IDSteam…“DruggedHealth”) and not timer.IsTimer(IDSteam) then
ply:SetHealth(ply:Health() + 100)
timer.Create(IDSteam…“DruggedHealth”, 60/(100 + 5), 100 + 5, function()
if ValidEntity(ply) then ply:SetHealth(ply:Health() - 1) end
if ply:Health() <= 0 then ply:Kill() end
end)
timer.Create(IDSteam, 60, 1, undrugged, ply)
end

end

function undrugged( ply )
if not ValidEntity(ply) then return end
local IDSteam = string.gsub(ply:SteamID(), “:”, “”)
timer.Remove(IDSteam…“DruggedHealth”)
timer.Remove(IDSteam)
ply:SetJumpPower(190)
GAMEMODE:SetPlayerSpeed(ply, GetConVarNumber(“wspd”), GetConVarNumber(“rspd”) )
end

function ENT:Think()
local phys = self:GetPhysicsObject()

end

function ENT:Use(activator,caller)
if not self.CanUse then return false end
Drugged(caller)
self.CanUse = false
self:EmitSound(“Drugs/hype.wav”)
self:Remove()
end
function ENT:OnTakeDamage(dmg)
self.damage = self.damage - dmg:GetDamage()

if (self.damage &lt;= 0) then
	local effectdata = EffectData()
	effectdata:SetOrigin(self.Entity:GetPos())
	effectdata:SetMagnitude(2)
	effectdata:SetScale(2)
	effectdata:SetRadius(3)
	util.Effect("Sparks", effectdata)
	self:Remove()
end

end
[/lua]
shared.lua
[lua]
ENT.Type = “anim”
ENT.Base = “base_gmodentity”

ENT.PrintName = “normal drugs”
ENT.Author = “Kruel Kramer”
ENT.Contact = “Don’t”
ENT.Purpose = “get high?”
ENT.Instructions = “Use with care.”
ENT.Category = “Rp Drugs :D”
[/lua]

Help? TIA

Drugged(caller)

make that: Drugged(activator)

and check if activator:IsPlayer() first

tryed it. absolutely no change.
ant more ideas?
+use does nothing

Just as a rule of thumb - i would try to stay away from timer.* if it relys on an entity. If the player is dead or if an ent that it relies on is missing, then the timer spews errors at you, and wont work.
I would try setting a player based variable then check that based on a given value in a think hook.
It might not be the most effective way of doing it but I bet its safer than a timer relying on an entity.

Just my 2 cents.

If +use isn’t doing anything then self.CanUse is still getting set to false somewhere.

From looking at your code I dont see anywhere where you initialize it to true (In ENT:Initialize for example)
If you dont initialize a boolean value to true, it will be false (if memory serves)

Feihc is right, if a bool is nil or false, it is false.

In ENT:Initialize() put: self.CanUse = true