need help to fix and improve this lua

i got this lua for a bankvault ent for gmod but it has 2 problems.

  1. i cant seem to spawn it and i dont have enough lua knowlage to find the problem.
  2. the vault (it more of an atm) wont give the money back, it only keeps and gives intrest but you cant withdraw it.
    can some1 help lua this peice please i need it for a server im working with.

i will paste the init.lua but i also have the shared.lua and cl_init.lua, if those are needed i will paste them later.

here is the init.lua for it

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

include(“shared.lua”)

debug = true

//setup a table to hold accounts
account = {}
//account[activator] stores how much money each player has put in

function ENT:Initialize()
self:SetModel(“models/props_lab/tpswitch.mdl”)
self.Entity:PhysicsInit(SOLID_VPHYSICS)
self.Entity:SetMoveType(MOVETYPE_VPHYSICS)
self.Entity:SetSolid(SOLID_VPHYSICS)
local phys = self.Entity:GetPhysicsObject()
if phys and phys:IsValid() then phys:Wake() end
end

function ENT:Use(activator,caller)
local startingamount = 50
local extraamount = 50

// This makes the entity semi-automatic rather than a continuous.
if ( !activator:KeyPressed( IN_USE ) ) then return end 

//if the player does not have enough money return
if( !activator:CanAfford(startingamount) or !activator:CanAfford(extraamount) ) then
	Notify(activator, 1, 4, "Sorry, you don't have enough money to make a transaction" )
	return
end

//Either setup a new account, or add to existing funds
if ( activator:IsPlayer()) then 
	if( !account[activator] ) then //If there is no account for this player
		account[activator] = startingamount
		activator:AddMoney(-startingamount)
		Notify(activator, 1, 4, "You Started a New Account with " .. startingamount .. "$ in it!" )
		timer.Create(activator:Nick() .. "_bankaccount", 60, 0, function()
			interest = math.floor(account[activator]/10) + math.random(1,9)
			activator:AddMoney(interest)
			Notify(activator, 1, 4, "Interest on your Bank Account made you " .. tostring(interest) .. "$!")
		end )
		if( debug ) then
			stringOut = table.ToString(account,"Accounts: " , true) 
	   
			Msg(stringOut .. "

")
end
return
end
if( account[activator] ) then //If an account already Exists
account[activator] = account[activator] + extraamount
activator:AddMoney(-extraamount)
Notify(activator, 1, 4, "You Deposited an Additional " … tostring(extraamount) … “, for a Grand total of " .. tostring(account[activator]) .. "!”)
if( debug ) then
stringOut = table.ToString(account,"Accounts: " , true)

			Msg(stringOut .. "

")
end
return
end

end 

end

function ENT:OnRemove() //destroy all timers
for k,v in pairs(player.GetAll()) do
if timer.IsTimer(v:Nick()…"_bankaccount") then
timer.Destroy(v:Nick()…"_bankaccount")
if( debug ) then
Msg(“Removing: " … v:Nick()…”_bankaccount" … "
")
end
end
end
end

function removeOldAccounts( ply )
if timer.IsTimer(ply:Nick()…"_bankaccount") then
timer.Destroy(ply:Nick()…"_bankaccount")
if( debug ) then
Msg(“Removing: " … ply:Nick()…”_bankaccount" … "
")
end
end
end // End the function
hook.Add( “PlayerDisconnected”, “playerdisconnected”, removeOldAccounts ) // Add PlayerDisconnected hook that calls our function.


(User was banned for this post ("Wrong forum" - mahalis))

Is it giving an error in the console? You should post it if it does.

i will check

[editline]12:54PM[/editline]

here, this comes up

ERROR: GAMEMODE:‘PlayerSay’ Failed: DarkRP\gamemode\modules/banker.lua:26: Tried to use a NULL entity!
Error: hook->PlayerSay returned a non-string!

[editline]01:05PM[/editline]

please someone help

[editline]01:12PM[/editline]

anyone please help, another thing i ment to add, when i say i doesnt spawn i mean it takes your $50 but not even a crate comes up. please help

Put your code in Lua tags. Otherwise we cant tell what line is line 26.

[lua]

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

include(“shared.lua”)

debug = true

//setup a table to hold accounts
account = {}
//account[activator] stores how much money each player has put in

function ENT:Initialize()
self:SetModel(“models/props_lab/tpswitch.mdl”)
self.Entity:PhysicsInit(SOLID_VPHYSICS)
self.Entity:SetMoveType(MOVETYPE_VPHYSICS)
self.Entity:SetSolid(SOLID_VPHYSICS)
local phys = self.Entity:GetPhysicsObject()
if phys and phys:IsValid() then phys:Wake() end
end

function ENT:Use(activator,caller)
local startingamount = 50
local extraamount = 50

// This makes the entity semi-automatic rather than a continuous.
if ( !activator:KeyPressed( IN_USE ) ) then return end

//if the player does not have enough money return
if( !activator:CanAfford(startingamount) or !activator:CanAfford(extraamount) ) then
Notify(activator, 1, 4, “Sorry, you don’t have enough money to make a transaction” )
return
end

//Either setup a new account, or add to existing funds
if ( activator:IsPlayer()) then
if( !account[activator] ) then //If there is no account for this player
account[activator] = startingamount
activator:AddMoney(-startingamount)
Notify(activator, 1, 4, "You Started a New Account with " … startingamount … “ in it!" ) timer.Create(activator:Nick() .. "_bankaccount", 60, 0, function() interest = math.floor(account[activator]/10) + math.random(1,9) activator:AddMoney(interest) Notify(activator, 1, 4, "Interest on your Bank Account made you " .. tostring(interest) .. "!”)
end )
if( debug ) then
stringOut = table.ToString(account,"Accounts: " , true)

Msg(stringOut … "
")
end
return
end
if( account[activator] ) then //If an account already Exists
account[activator] = account[activator] + extraamount
activator:AddMoney(-extraamount)
Notify(activator, 1, 4, "You Deposited an Additional " … tostring(extraamount) … “, for a Grand total of " .. tostring(account[activator]) .. "!”)
if( debug ) then
stringOut = table.ToString(account,"Accounts: " , true)

Msg(stringOut … "
")
end
return
end

end

end

function ENT:OnRemove() //destroy all timers
for k,v in pairs(player.GetAll()) do
if timer.IsTimer(v:Nick()…"_bankaccount") then
timer.Destroy(v:Nick()…"_bankaccount")
if( debug ) then
Msg(“Removing: " … v:Nick()…”_bankaccount" … "
")
end
end
end
end

function removeOldAccounts( ply )
if timer.IsTimer(ply:Nick()…"_bankaccount") then
timer.Destroy(ply:Nick()…"_bankaccount")
if( debug ) then
Msg(“Removing: " … ply:Nick()…”_bankaccount" … "
")
end
end
end // End the function
hook.Add( “PlayerDisconnected”, “playerdisconnected”, removeOldAccounts ) // Add PlayerDisconnected hook that calls our function.
[/lua]

Give us the banker.lua then

Banker.lua is the code he just posted us…

Are you Stupid.

Perhaps I am.

I just misread.

here is the banker.lua

function BuyBankVault(ply)
if ( !ply:IsValid() ) then return end
if ( !SERVER ) then return end

local cost = 50
local tr = ply:GetEyeTrace() 

if ( !tr.HitWorld ) then return end 

if RPArrestedPlayers[ply:SteamID()] then return "" end


if not ply:CanAfford(cost) then
	Notify(ply, 1, 4, "Can not afford this!")
	return ""
end
if ply:Team() == TEAM_BANKER then
	ply:AddMoney(-cost)
	Notify(ply, 1, 4, "You bought a Bank Vault for " .. CUR .. tostring(cost))
	local bvault = ents.Create("sent_bankvault")
	bvault:SetNWEntity("owning_ent", ply)
	bvault:SetNWString("Owner", ply:Nick())
	bvault:SetPos( tr.HitPos + ply:GetAimVector() * -80 )
	bvault:SetAngles( tr.HitNormal:Angle() )
	bvault.nodupe = true
	bvault.SID = ply.SID
	bvault.onlyremover = true
	bvault:Spawn()
	return ""
else
	Notify(ply, 1, 4, "Must be a Banker to Spawn This!")
end
return ""

end
AddChatCommand("/buybvault", BuyBankVault)

function GM:PlayerDisconnected(ply)

for k, v in pairs(ents.FindByClass("sent_bankvault")) do
	if v.SID == ply.SID then v:Remove() end
end

end

Use lua tags: [lua] [/ lua] (Without the space)

[lua]function BuyBankVault(ply)
if ( !ply:IsValid() ) then return end
if ( !SERVER ) then return end

local cost = 50
local tr = ply:GetEyeTrace()

if ( !tr.HitWorld ) then return end

if RPArrestedPlayers[ply:SteamID()] then return “” end

if not ply:CanAfford(cost) then
Notify(ply, 1, 4, “Can not afford this!”)
return “”
end
if ply:Team() == TEAM_BANKER then
ply:AddMoney(-cost)
Notify(ply, 1, 4, “You bought a Bank Vault for " … CUR … tostring(cost))
local bvault = ents.Create(“sent_bankvault”)
bvault:SetNWEntity(“owning_ent”, ply)
bvault:SetNWString(“Owner”, ply:Nick())
bvault:SetPos( tr.HitPos + ply:GetAimVector() * -80 )
bvault:SetAngles( tr.HitNormal:Angle() )
bvault.nodupe = true
bvault.SID = ply.SID
bvault.onlyremover = true
bvault:Spawn()
return “”
else
Notify(ply, 1, 4, “Must be a Banker to Spawn This!”)
end
return “”
end
AddChatCommand(”/buybvault", BuyBankVault)

function GM:PlayerDisconnected(ply)

for k, v in pairs(ents.FindByClass(“sent_bankvault”)) do
if v.SID == ply.SID then v:Remove() end
end

end [/lua]

tyvm