need help getting money system working

i need a money system that awards money on kills (which will be put it later, not now)
but i have trouble even using this code (not mine) that has meta tables


local Player = FindMetaTable("Player")
if !Player then return end

function Player:GetMoney()
	return self.Money or 0
end

function Player:CanAfford(num)
	return (self:GetMoney()-num) >= 0
end

if SERVER then
	util.AddNetworkString("ply_Money")
	function Player:SetMoney(num, bank)
		self.Money = num
		net.Start("ply_Money")
			net.WriteEntity(self)
			net.WriteInt(num, 32)
		net.Broadcast()
	end
	
	function Player:AddMoney(num)
		self:SetMoney(self:GetMoney()+num)
	end
else
	net.Receive("ply_Money", function(len)
		local ply = net.ReadEntity()
		local num = net.ReadInt(32)
		if !IsValid(ply) then return end
		ply.Money = num
	end)
end



i learnt abit of lua earlier today but i have no idea what metatables are, so this code, it sets up the money system right? so do i have money now? what is a “net.ReadInt”? is there anything else i need to put into the gamemode? and how do i see my cash or whatever?
any help is appreciated.

I’m assuming you got that from a post I made a while back, if you go back to that thread there should be another post with the same code with comments in it.

[editline]19th March 2014[/editline]

Found it:
http://forum.facepunch.com/showthread.php?t=1315437&p=42529130&viewfull=1#post42529130

[lua]
local Player = FindMetaTable(“Player”) --Find the Players MetaTable
if !Player then return end --If the MetaTable doesn’t exist stop here

function Player:GetMoney() --Calling this function will return your money, if money is nil then 0 will return
return self.Money or 0
end

function Player:CanAfford(num)
return (self:GetMoney()-num) >= 0
end

if SERVER then
util.AddNetworkString(“ply_Money”) --Precache the net library message
function Player:SetMoney(num)
self:SetPData(“money”, num) --Save to SQLite database in the gmod base folder
self.Money = num
net.Start(“ply_Money”) --start net message
net.WriteEntity(self) --write the player
net.WriteInt(num, 32)
net.Broadcast() --send the message to all players
end

function Player:AddMoney(num)
	self:SetMoney(self:GetMoney()+num)
end

local startMoney = 100
hook.Add("PlayerInitialSpawn", "sh_money.PlayerInitialSpawn", function(ply)
	timer.Simple(1, function()	
		if !IsValid(ply) then return end
		ply:SetMoney(ply:GetPData("money", startMoney)) --If the PData of "money" is nil it will use startMoney as the value instead
	end)
end)

else
net.Receive(“ply_Money”, function(len)
local ply = net.ReadEntity()
local num = net.ReadInt(32)
if !IsValid(ply) then return end --If the player doesn’t exist stop here
ply.Money = num --set the value on the player object
end)
end
[/lua]

oh thank you very much!

may i ask why doesnt


function print( Player:GetMoney() )

end

work?

Because you’re redefining a function by doing that, in addition to that, you’re not declaring a variable as an argument but a function value with something which may not exist which may cause an error.

If you over-write print, then use function print( … ) deal with …; end

… allows for unlimited arguments to be passed. I overwrite print in favor of using MsgC with different colors being used for different data-types.

If you’re only trying to print the data, simply : print( Player:GetMoney( ) );