Upgradable Money Printers

Hello.

About a week ago I made a thread about a problem I had with these upgradable printers I made, well the problem here now is, when I press “E” on them, instead of it just levelling up one level, it levels up to level 5, I can’t seem to fix it.

[lua] – RRPX Money Printer reworked for DarkRP by philxyz
– RRPX Money Printer reworked for DarkRP by philxyz
AddCSLuaFile(“cl_init.lua”)
AddCSLuaFile(“shared.lua”)
include(“shared.lua”)

local PrintMore
function ENT:Initialize()
self:SetModel(“models/props_c17/consolebox01a.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.sparking = false
self.damage = 100
self.IsMoneyPrinter = true
timer.Simple(27, PrintMore, self)
self.MPLevel = 1
if self.MPLevel == 1 then
Entity = ents.Create(“prop_physics”); --this line is totally redundant, which is it, prop_physics or prop_dynamic_override?!
Entity = ents.Create(“prop_dynamic_override”);
Entity:SetPos(self:GetPos() + Vector(0, 0, 14))
Entity:SetAngles(self:GetAngles() - Angle(0, 0, 0));
Entity:SetParent(self);
Entity:Spawn();
end
end

function ENT:OnTakeDamage(dmg)
if self.burningup then return end

self.damage = (self.damage or 100) - dmg:GetDamage()
if self.damage <= 0 then
    local rnd = math.random(1, 10)
    if rnd < 3 then
        self:BurstIntoFlames()
    else
        self:Destruct()
        self:Remove()
    end
end

end

function ENT:Destruct()
local vPoint = self:GetPos()
local effectdata = EffectData()
effectdata:SetStart(vPoint)
effectdata:SetOrigin(vPoint)
effectdata:SetScale(1)
util.Effect(“Explosion”, effectdata)
Notify(self.dt.owning_ent, 1, 4, “Your money printer has exploded!”)
end

function ENT:BurstIntoFlames()
Notify(self.dt.owning_ent, 0, 4, “Your money printer is overheating!”)
self.burningup = true
local burntime = math.random(8, 18)
self:Ignite(burntime, 0)
timer.Simple(burntime, self.Fireball, self)
end

function ENT:Fireball()
if not self:IsOnFire() then self.burningup = false return end
local dist = math.random(20, 280) – Explosion radius
self:Destruct()
for k, v in pairs(ents.FindInSphere(self:GetPos(), dist)) do
if not v:IsPlayer() and not v.IsMoneyPrinter then v:Ignite(math.random(5, 22), 0) end
end
self:Remove()
end

PrintMore = function(ent)
if ValidEntity(ent) then
ent.sparking = true
timer.Simple(3, ent.CreateMoneybag, ent)
end
end

function ENT:CreateMoneybag()
if not ValidEntity(self) then return end
if self:IsOnFire() then return end
local MoneyPos = self:GetPos()

if math.random(10, 22) == 3 then self:BurstIntoFlames() end
 
local amount
if self.MPLevel == 1 then
    amount = math.random(150,200)
    self:EmitSound("items/spawn_item.wav", 85, 100)
elseif self.MPLevel == 2 then
    amount = math.random(200,400)
    self:EmitSound("items/spawn_item.wav", 85, 100)
end


DarkRPCreateMoneyBag(Vector(MoneyPos.x + 15, MoneyPos.y, MoneyPos.z + 15), amount)
self.sparking = false
timer.Simple(math.random(10, 15), PrintMore, self)

end

–function UpdateMP(ply, key)
– local trace = ply:GetEyeTrace()
– local e = trace.Entity
– if ValidEntity(e) and trace.HitPos:Distance(ply:GetShootPos()) <= 100 then
– if e = “vip_printer” then
– if key == “USE” and MPLevel == 1 then
– MPLevel = MPLevel + 1
– print(“models/props_lab/reciever01b.mdl”)
– end
– end
– end
–end

function ENT:Use( activator, caller )

if activator != self.dt.owning_ent then
    Notify( activator, 1, 4, "You're not the Owner of the Money Printer." )
    return
end
 
if self.MPLevel == 1 then
    if not activator:CanAfford(5000) then
        Notify(activator, 1, 10, "You can't afford it!")
        return
    end
    activator:AddMoney(-5000)
    self:SetPos(self:GetPos() + Vector(0,0,10))
    self:SetModel("models/props_lab/reciever01b.mdl")
    self:PhysicsInit(SOLID_VPHYSICS)
    self:SetMoveType(MOVETYPE_VPHYSICS)
    self:SetSolid(SOLID_VPHYSICS)
    self.MPLevel = 2
    Notify( activator, 1, 4, "Your Money Printer is now Level 2" )
end

if self.MPLevel == 2 then
    if not activator:CanAfford(10000) then
        Notify(activator, 1, 10, "You can't afford it!")
        return
    end
    activator:AddMoney(-10000)
    self:SetPos(self:GetPos() + Vector(0,0,10))
    self:SetModel("models/props_lab/reciever01b.mdl")
    self:PhysicsInit(SOLID_VPHYSICS)
    self:SetMoveType(MOVETYPE_VPHYSICS)
    self:SetSolid(SOLID_VPHYSICS)
    self.MPLevel = 3
    Notify( activator, 1, 4, "Your Money Printer is now Level 3" )
end


if self.MPLevel == 3 then
    if not activator:CanAfford(15000) then
        Notify(activator, 1, 10, "You can't afford it!")
        return
    end
    activator:AddMoney(-15000)
    self:SetPos(self:GetPos() + Vector(0,0,10))
    self:SetModel("models/props_lab/reciever01b.mdl")
    self:PhysicsInit(SOLID_VPHYSICS)
    self:SetMoveType(MOVETYPE_VPHYSICS)
    self:SetSolid(SOLID_VPHYSICS)
    self.MPLevel = 4
    Notify( activator, 1, 4, "Your Money Printer is now Level 4" )
end

if self.MPLevel == 4 then
if not activator:CanAfford(20000) then
Notify(activator, 1, 10, “You can’t afford it!”)
return
end
activator:AddMoney(-20000)
self:SetPos(self:GetPos() + Vector(0,0,10))
self:SetModel(“models/props_lab/reciever01b.mdl”)
self:PhysicsInit(SOLID_VPHYSICS)
self:SetMoveType(MOVETYPE_VPHYSICS)
self:SetSolid(SOLID_VPHYSICS)
self.MPLevel = 5
Notify( activator, 1, 4, “Your Money Printer is now Level 5” )
end
end

function ENT:Think()
if not self.sparking then return end

local effectdata = EffectData()
effectdata:SetOrigin(self:GetPos())
effectdata:SetMagnitude(1)
effectdata:SetScale(1)
effectdata:SetRadius(2)
util.Effect("Sparks", effectdata)

end
[/lua]

Use self:SetUseType(USE_SIMPLE) in ENT:Initialize.

[lua] local PrintMore
function ENT:Initialize()
self:SetModel(“models/props_c17/consolebox01a.mdl”)
self:PhysicsInit(SOLID_VPHYSICS)
self:SetUseType() [/lua]

Something like that?

Put USE_SIMPLE in the function argument.

Or on the Ent:Use() function, put this in the very top.



if CantUpgrade then return end 
		CantUpgrade = true 
		timer.Simple(1, function() 
					CantUpgrade = false
				end)


Wrong.

[lua]
local delay = 5; – Five second delay.

function ENT:Use(activator, caller)
if ( (activator._NextUse or 0) < CurTime() ) then
– Do your stuff.
activator._NextUse = CurTime() + delay;
end;
end;
[/lua]

I added it but it says an eof is expected.

[lua]
local delay = 5 --Change me for how many seconds the delay is.
function ENT:Use( activator, caller )
if ( (activator._NextUse or 0) > CurTime() ) then return end

if activator != self.dt.owning_ent then
    Notify( activator, 1, 4, "You're not the Owner of the Money Printer." )
    return
end
if self.MPLevel == 1 then
    if not activator:CanAfford(5000) then
        Notify(activator, 1, 10, "You can't afford it!")
        return
    end
    activator:AddMoney(-5000)
    self:SetPos(self:GetPos() + Vector(0,0,10))
    self:SetModel("models/props_lab/reciever01b.mdl")
    self:PhysicsInit(SOLID_VPHYSICS)
    self:SetMoveType(MOVETYPE_VPHYSICS)
    self:SetSolid(SOLID_VPHYSICS)
    self.MPLevel = 2
    Notify( activator, 1, 4, "Your Money Printer is now Level 2" )
end

if self.MPLevel == 2 then
    if not activator:CanAfford(10000) then
        Notify(activator, 1, 10, "You can't afford it!")
        return
    end
    activator:AddMoney(-10000)
    self:SetPos(self:GetPos() + Vector(0,0,10))
    self:SetModel("models/props_lab/reciever01b.mdl")
    self:PhysicsInit(SOLID_VPHYSICS)
    self:SetMoveType(MOVETYPE_VPHYSICS)
    self:SetSolid(SOLID_VPHYSICS)
    self.MPLevel = 3
    Notify( activator, 1, 4, "Your Money Printer is now Level 3" )
end


if self.MPLevel == 3 then
    if not activator:CanAfford(15000) then
        Notify(activator, 1, 10, "You can't afford it!")
        return
    end
    activator:AddMoney(-15000)
    self:SetPos(self:GetPos() + Vector(0,0,10))
    self:SetModel("models/props_lab/reciever01b.mdl")
    self:PhysicsInit(SOLID_VPHYSICS)
    self:SetMoveType(MOVETYPE_VPHYSICS)
    self:SetSolid(SOLID_VPHYSICS)
    self.MPLevel = 4
    Notify( activator, 1, 4, "Your Money Printer is now Level 4" )
end

if self.MPLevel == 4 then
if not activator:CanAfford(20000) then
Notify(activator, 1, 10, “You can’t afford it!”)
return
end
activator:AddMoney(-20000)
self:SetPos(self:GetPos() + Vector(0,0,10))
self:SetModel(“models/props_lab/reciever01b.mdl”)
self:PhysicsInit(SOLID_VPHYSICS)
self:SetMoveType(MOVETYPE_VPHYSICS)
self:SetSolid(SOLID_VPHYSICS)
self.MPLevel = 5
Notify( activator, 1, 4, “Your Money Printer is now Level 5” )
end
activator._NextUse = CurTime() + delay;
end
[/lua]

It done the same thing.

[lua]
local delay = 5 --Change me for how many seconds the delay is.
function ENT:Use( activator, caller )
if ( (activator._NextUse or 0) > CurTime() ) then return end

if activator != self.dt.owning_ent then
    Notify( activator, 1, 4, "You're not the Owner of the Money Printer." )
    return
end
if self.MPLevel == 1 then
    if not activator:CanAfford(5000) then
        Notify(activator, 1, 10, "You can't afford it!")
        return
    end
    activator:AddMoney(-5000)
    self:SetPos(self:GetPos() + Vector(0,0,10))
    self:SetModel("models/props_lab/reciever01b.mdl")
    self:PhysicsInit(SOLID_VPHYSICS)
    self:SetMoveType(MOVETYPE_VPHYSICS)
    self:SetSolid(SOLID_VPHYSICS)
    self.MPLevel = 2
    Notify( activator, 1, 4, "Your Money Printer is now Level 2" )
elseif self.MPLevel == 2 then
    if not activator:CanAfford(10000) then
        Notify(activator, 1, 10, "You can't afford it!")
        return
    end
    activator:AddMoney(-10000)
    self:SetPos(self:GetPos() + Vector(0,0,10))
    self:SetModel("models/props_lab/reciever01b.mdl")
    self:PhysicsInit(SOLID_VPHYSICS)
    self:SetMoveType(MOVETYPE_VPHYSICS)
    self:SetSolid(SOLID_VPHYSICS)
    self.MPLevel = 3
    Notify( activator, 1, 4, "Your Money Printer is now Level 3" )
elseif self.MPLevel == 3 then
    if not activator:CanAfford(15000) then
        Notify(activator, 1, 10, "You can't afford it!")
        return
    end
    activator:AddMoney(-15000)
    self:SetPos(self:GetPos() + Vector(0,0,10))
    self:SetModel("models/props_lab/reciever01b.mdl")
    self:PhysicsInit(SOLID_VPHYSICS)
    self:SetMoveType(MOVETYPE_VPHYSICS)
    self:SetSolid(SOLID_VPHYSICS)
    self.MPLevel = 4
    Notify( activator, 1, 4, "Your Money Printer is now Level 4" )
elseif self.MPLevel == 4 then
    if not activator:CanAfford(20000) then
        Notify(activator, 1, 10, "You can't afford it!")
        return
    end
    activator:AddMoney(-20000)
    self:SetPos(self:GetPos() + Vector(0,0,10))
    self:SetModel("models/props_lab/reciever01b.mdl")
    self:PhysicsInit(SOLID_VPHYSICS)
    self:SetMoveType(MOVETYPE_VPHYSICS)
    self:SetSolid(SOLID_VPHYSICS)
    self.MPLevel = 5
    Notify( activator, 1, 4, "Your Money Printer is now Level 5" )
end
activator._NextUse = CurTime() + delay;

end
[/lua]

Why are you changing the model to the same thing as before?
Also, if this doesn’t work, it’s somewhere else in your code.

You’re doing this in such a dumb and inefficient way, change it to use a single function like this

[lua]
function Entity:OnUpgrade( intCurrentLevel, intUpgradeLevel )
end
[/lua]

Here try this code out:

[lua]
– RRPX Money Printer reworked for DarkRP by philxyz

AddCSLuaFile(“cl_init.lua”)
AddCSLuaFile(“shared.lua”)
include(“shared.lua”)

local PrintMore

– MPLevel = 0; we will override in the below function
local MPLevel = 0
function ENT:Initialize()
self:SetModel(“models/props_c17/consolebox01a.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.sparking = false
self.damage = 100
self.IsMoneyPrinter = true
timer.Simple(27, PrintMore, self)
– Set this entities level as 1.
self.MPLevel = 1

-- Removed that if check; I don't see the point.

end

function ENT:OnTakeDamage(dmg)
if self.burningup then return end

self.damage = (self.damage or 100) - dmg:GetDamage()
if self.damage &lt;= 0 then
    local rnd = math.random(1, 10)
    if rnd &lt; 3 then
        self:BurstIntoFlames()
    else
        self:Destruct()
        self:Remove()
    end
end

end

function ENT:Destruct()
local vPoint = self:GetPos()
local effectdata = EffectData()
effectdata:SetStart(vPoint)
effectdata:SetOrigin(vPoint)
effectdata:SetScale(1)
util.Effect(“Explosion”, effectdata)
Notify(self.dt.owning_ent, 1, 4, “Your money printer has exploded!”)
end

function ENT:BurstIntoFlames()
Notify(self.dt.owning_ent, 0, 4, “Your money printer is overheating!”)
self.burningup = true
local burntime = math.random(8, 18)
self:Ignite(burntime, 0)
timer.Simple(burntime, self.Fireball, self)
end

function ENT:Fireball()
if not self:IsOnFire() then self.burningup = false return end
local dist = math.random(20, 280) – Explosion radius
self:Destruct()
for k, v in pairs(ents.FindInSphere(self:GetPos(), dist)) do
if not v:IsPlayer() and not v.IsMoneyPrinter then v:Ignite(math.random(5, 22), 0) end
end
self:Remove()
end

PrintMore = function(ent)
if ValidEntity(ent) then
ent.sparking = true
timer.Simple(3, ent.CreateMoneybag, ent)
end
end

function ENT:CreateMoneybag()
if not ValidEntity(self) then return end
if self:IsOnFire() then return end
local MoneyPos = self:GetPos()

-- I don't know if you added a 0 after the 1 on purpose,
-- but 3 cannot be in a range of 10 - 22. Fixed now though.
if math.random(10, 22) == 13 then self:BurstIntoFlames() end
  
-- amount of money is the entities level. We don't want this though
local amount = self.MPLevel 

-- So we check if the "amount" is 1, (the money printers level) if it is
if amount == 1 then

	-- make it randomly give out from 150 - 200 worth your servers currency
	math.random(150,200)
	
	-- money printer level is not level 1?
else

	-- print amount is money printer level multiplied by range of 100-200
	-- Example: level 2 money printer * 115 (a random number in that range) is 
	--230 worth of your servers currency
	amount = amount * math.random(100,200)
end
-- Doesn't matter what level they are, emit the sound baby!
self:EmitSound("items/spawn_item.wav", 85, 100)


DarkRPCreateMoneyBag(Vector(MoneyPos.x + 15, MoneyPos.y, MoneyPos.z + 15), amount)
self.sparking = false
-- You do realize that this money printer prints very quicky, right?
-- Your choice but if aynthing I would make it depend on their level
timer.Simple(math.random(10, 15), PrintMore, self)

end

–function UpdateMP(ply, key)
– local trace = ply:GetEyeTrace()
– local e = trace.Entity
– if ValidEntity(e) and trace.HitPos:Distance(ply:GetShootPos()) <= 100 then
– if e = “vip_printer” then
– if key == “USE” and MPLevel == 1 then
– MPLevel = MPLevel + 1
– print(“models/props_lab/reciever01b.mdl”)
– end
– end
– end
–end

local upg_delay = 3 – It takes 3 seconds until they can upgrade it again.
local costamount = 0
function ENT:Use( activator, caller )
– I am not positive about the below if check, im 99.99% sure it will work though.

--[[
	if activator:Distance(self:GetPos()) &gt; 100 then
	--Notify( activator, 1, 4, "You are too far away from the money printer!" )
	--return
end
]]--

-- If the current server time is not greater than the time needed for the next upgrade to happen, STOP EVERYTHING
if not CurTime() &gt;= (activator.NextUpgradetime or 0) then return end

if activator != self.dt.owning_ent then
    Notify( activator, 1, 4, "You're not the Owner of the Money Printer." )
    return
end
 
-- I'm pretty sure I'm doing this one wrong, and everything will cost 5000. But let's check anyways.
if self.MPLevel == 1 then
	costamount = 5000
else
	costamount = costamount + 5000
end

if not activator:CanAfford(costamount) then
	-- If they cant afford it, say that they cant afford to buy the next level up from the current money printer level.
	Notify(activator, 1, 10, "You can't afford to buy level " .. self.MPLevel + 1 .. "!")
	return
end
-- Take the cost amount from the player
activator:AddMoney(-costamount)
-- I didn't see then need of having the vector up 10,
-- but just in case it would get stuck respawning i set it to go 3 units up
self:SetPos(self:GetPos() + Vector(0,0,3))
self:SetModel("models/props_lab/reciever01b.mdl")
self:PhysicsInit(SOLID_VPHYSICS)
self:SetMoveType(MOVETYPE_VPHYSICS)
self:SetSolid(SOLID_VPHYSICS)
-- I believe you were missing the spawn function.
self:Spawn()
-- Set the money printer level one level higher
self.MPLevel = self.MPLevel + 1
-- Tell the player what level the money printer is now.
Notify( activator, 1, 4, "Your money printer is now level " .. self.MPLevel )

-- Make the next upgrade time the current server time plus 3 seconds (or whatever you set it to)
activator.NextUpgradeTime = CurTime() + upg_delay

end

function ENT:Think()
if not self.sparking then return end

local effectdata = EffectData()
effectdata:SetOrigin(self:GetPos())
effectdata:SetMagnitude(1)
effectdata:SetScale(1)
effectdata:SetRadius(2)
util.Effect("Sparks", effectdata)

end
[/lua]

Most of the things I changed / added / removed I put a reason why and what it does.
Personally I hate seeing things hardcoded in like “if Level == 3 then GiveWeaponHere end”.
Now you don’t have to see all that ugliness either!

It works thank you, now I have to figure out how to make it show the level of the printer.

At the cl_init.lua of the money printer there should be something like this:

[lua]
cam.Start3D2D(Pos + Ang:Up() * 11.5, Ang, 0.11)
draw.WordBox(2, -TextWidth0.5, -30, “Money printer”, “HUDNumber5”, Color(140, 0, 0, 100), Color(255,255,255,255))
draw.WordBox(2, -TextWidth2
0.5, 18, owner, “HUDNumber5”, Color(140, 0, 0, 100), Color(255,255,255,255))
cam.End3D2D()
[/lua]

You need to put a new draw.WordBox below the one with the owner name, something like:
[lua]
draw.WordBox(2, -TextWidth2*0.5, 6, "Current Level: " … self.MPLevel, “HUDNumber5”, Color(140, 0, 0, 100), Color(255,255,255,255))
[/lua]

Not sure if it will work because of the self.MPLevel, but the rest is right, also, to adjust the height, change that 6.

@Stillnex: Yes, you should be right on the self.MPLevel part. But let’s backup a little bit. See the second argument in draw.WordBox() ? Okay, so we’re setting the width of self.MPLevel. Well if you look a little above the cam.Start3D2D and Ang:RotateAroundAxis functions you will spot 2 local variables.
If you haven’t noticed already, you are setting the width of “Current Level: (mplevel)” to pop up with the length of the current money printer owner. Sure, this would be alright in SOME cases, but if someone has a rp name like “Bob” or even “Larry Pig” then not all of the text would show up. In the case of bob the text would only show up till “Cur”, maybe “Curr”. Look below at code I posted to see how easy it is to fix that mistake. (Easy mistake to make)
Not only that, but if you look at the 3rd argument in draw.WordBox() you will see you had posted the number 6. Now I guess you thought you were supposed to subtract by 12 each time, (easy mistake to make) but you are actually wrong. See, the first one with the “Money Printer” is actually -30, not 30. We are actually NOT subtracting, but adding by 48 each time. So “Current Level (level)” would be 66.

@Leader of Me: Stillnex should be right, but if you use his code and do nothing then 2 things will probably happen:

  1. Not all of the text in “Current Level (level here)” will show up, depending on the player.
  2. The “Current Level (level here)” will almost definitely be in the middle of the money printer owner and the sign displaying money printer.
    Stillnex made a simple mistake that lots of coders here have done at least once in their “career”. Look below for fixed code.

The following code will be put in the money printer entity cl_init.lua
[lua]
– Doesn’t really matter where you put this in the cl_init.lua,
– as long as it’s in the ENT:Draw() function.

– For the sake of future editing, place it below the local variable TextWidth2
local TextWidth3 = surface.GetTextSize(self.MPLevel)
[/lua]

Good! You’re done that step. Moving on:
[lua]
– We are fixing the not-displaying-all-the-text issue
– and the ohno-they-are-all-mushed-together issue
cam.Start3D2D(Pos + Ang:Up() * 11.5, Ang, 0.11)
draw.WordBox(2, -TextWidth0.5, -30, “Money printer”, “HUDNumber5”, Color(140, 0, 0, 100), Color(255,255,255,255))
draw.WordBox(2, -TextWidth2
0.5, 18, owner, “HUDNumber5”, Color(140, 0, 0, 100), Color(255,255,255,255))
draw.WordBox(2, -TextWidth3*0.5, 66, "Current Level: " … self.MPLevel, Color(140, 0, 0, 100), Color(255,255,255,255))
cam.End3D2D()
[/lua]

Replace the old 3D2D functions and everything in those with the above lua paste.
Your money printer cl_init.lua should now look like (beware, this code may be outdated soon if falco changes any code in there):
[lua]
include(“shared.lua”)

function ENT:Initialize()
end

function ENT:Draw()
self.Entity:DrawModel()

local Pos = self:GetPos()
local Ang = self:GetAngles()

local owner = self.dt.owning_ent
owner = (ValidEntity(owner) and owner:Nick()) or "unknown"

surface.SetFont("HUDNumber5")
local TextWidth = surface.GetTextSize("Money printer")
local TextWidth2 = surface.GetTextSize(owner)
local TextWidth3 = surface.GetTextSize(self.MPLevel)

Ang:RotateAroundAxis(Ang:Up(), 90)

cam.Start3D2D(Pos + Ang:Up() * 11.5, Ang, 0.11)
	draw.WordBox(2, -TextWidth*0.5, -30, "Money printer", "HUDNumber5", Color(140, 0, 0, 100), Color(255,255,255,255))
	draw.WordBox(2, -TextWidth2*0.5, 18, owner, "HUDNumber5", Color(140, 0, 0, 100), Color(255,255,255,255))
	draw.WordBox(2, -TextWidth3*0.5, 66, "Current Level: " .. self.MPLevel, Color(140, 0, 0, 100), Color(255,255,255,255))
cam.End3D2D()

end

function ENT:Think()
end
[/lua]

Spare some heart ratings (Substitute of lua helper)? I’m desperate and I’m running out of ego. Help me help you.

Damn, I forgot that, I didn’t test it at all though, but you are right, I’d rate you lua helper, but facepunch doesn’t shows it, watafa