Help with stopping people buying items.

Any idea why I get the message “Please wait for the round to start before you buy anything.” every time I try buy a second thing? e.g. I buy Traitor and then I buy a gun and I can’t buy the gun.

[lua]
local _date = os.date("%b") … os.date("%d")
local _R = debug.getregistry()
Store.TTable = {}
Store.DTable = {}

function _R.Player:StoreInitialize( )
tmysql.query( “SELECT value FROM tokens WHERE steamid = '” … self:SteamID() … “’”, function( tokens )
if !tokens or #tokens == 0 then
tmysql.query( “INSERT INTO tokens VALUES( '” … self:Nick() … “’, '” … self:SteamID() … “’, '” … 5 … “’ )” )
self:SetNWInt(“tokens”, 5)
else
self:SetNWInt(“tokens”, tonumber( tokens[1][1] ) )
end
end)
tmysql.query( “SELECT value FROM lastjoin WHERE steamid = '” … self:SteamID() … “’”, function( date )
if !date or !date[1] then
tmysql.query( “INSERT INTO lastjoin VALUES( '” … self:SteamID() … “’, '” … tmysql.escape(_date) … “’ )” )
if self:IsAdmin() or self:IsUserGroup(“vip”) or self:IsUserGroup(“moderator”) then
self:SetNWInt(“tokens”, self:GetNWInt(“tokens”) + 20)
else
self:SetNWInt(“tokens”, self:GetNWInt(“tokens”) + 1)
end
else
if date[1][1] != _date then
tmysql.query( “UPDATE lastjoin SET value = '” … tmysql.escape(_date) … “’ WHERE steamid = '” … self:SteamID() … “’”, SQLHandle )
if self:IsAdmin() or self:IsUserGroup(“vip”) or self:IsUserGroup(“moderator”) then
self:SetNWInt(“tokens”, self:GetNWInt(“tokens”) + 20)
else
self:SetNWInt(“tokens”, self:GetNWInt(“tokens”) + 1)
end
end
end
end)
end

function _R.Player:Save( )
local cash = tonumber(self:GetNWInt(“tokens”))
tmysql.query( “UPDATE tokens SET value = '” … cash … “’ WHERE steamid = '” … self:SteamID() … “’”, SQLHandle )
end

function _R.Player:AddTokens( n )
if !n then return end
math.floor(tonumber(n))
self:SetNWInt(“tokens”, self:GetNWInt(“tokens”) + n)
self:Save()
end

function _R.Player:TakeTokens( n )
if !n then return end
math.floor(tonumber(n))
self:SetNWInt(“tokens”, self:GetNWInt(“tokens”) - n)
self:Save()
end

function _R.Player:BuyItem( id )
if self:CanBuy() != false then
self.BoughtT = 0
local id = tonumber(id)
if id == 0 then
if self:GetRole() == ROLE_TRAITOR or ROLE_DETECTTIVE then
self:SetCredits(self:GetCredits() + 1)
self:TakeTokens( Store.ItemsTable[id][2] )
self:ChatPrint( “You bought " … Store.ItemsTable[id][1] … " for " … tonumber(Store.ItemsTable[id][2]) … " tokens.” )
else
self:ChatPrint(“You must be a Traitor or a Detective to buy credits.”)
end
elseif id == 1 then
local found = false
if self.ForceDetective then return end
self.ForceTraitor = true
if PlayerCount() >= 8 then
for k, v in pairs(player.GetAll()) do
if v.ForceTraitor then
if table.Count(Store.TTable) <= GetTMax() then
table.insert(Store.TTable, v:Nick())
else
self:ChatPrint(“Too many people have bought traitor for next round.”)
found = true
self.ForceTraitor = false
end
end
end
if !found then
self.boughtT = self.boughtT + 1
self:TakeTokens( Store.ItemsTable[id][2] )
self:ChatPrint( “You bought " … Store.ItemsTable[id][1] … " for " … tonumber(Store.ItemsTable[id][2]) … " tokens” )
self:ChatPrint( “You will be made " … Store.ItemsTable[id][1] … " next round.” )
end
else
self:ChatPrint(“Please wait for more people to join before you buy Traitor.”)
self.ForceTraitor = false
end
elseif id == 2 then
local found = false
if self.ForceTraitor then return end
if PlayerCount() >= 8 then
for k, v in pairs(player.GetAll()) do
if v.ForceDetective then
if table.Count(Store.TTable) <= GetDMax() then
table.insert(Store.DTable, v:Nick())
else
self:ChatPrint(“Too many people have bought detective for next round.”)
found = true
self.ForceDetective = false
end
end
end
if !found then
self.ForceDetective = true
self:TakeTokens( Store.ItemsTable[id][2] )
self:ChatPrint( “You bought " … Store.ItemsTable[id][1] … " for " … tonumber(Store.ItemsTable[id][2]) … " tokens” )
self:ChatPrint( “You will be made " … Store.ItemsTable[id][1] … " next round.” )
end
end
elseif id == 3 then
if self:CanBuy() == false or “tord” then
self:ChatPrint(“Please wait for the round to start before you buy anything.”)
else
for k, v in pairs(Store.SecondaryWeaponTable) do
if self:HasWeapon(v[1]) then
self:DropNamedWeapon(v[1])
break
end
end
self:Give(“weapon_zm_pistol”)
self:GiveAmmo(60, “Pistol”)
self:TakeTokens( Store.ItemsTable[id][2] )
self:ChatPrint( “You bought " … Store.ItemsTable[id][1] … " for " … tonumber(Store.ItemsTable[id][2]) … " tokens.” )
end
elseif id == 4 then
if self:CanBuy() == false or “tord” then
self:ChatPrint(“Please wait for the round to start before you buy anything.”)
else
for k, v in pairs(Store.SecondaryWeaponTable) do
if self:HasWeapon(v[1]) then
self:DropNamedWeapon(v[1])
break
end
end
self:Give(“weapon_ttt_glock”)
self:GiveAmmo(60, “Pistol”)
self:TakeTokens( Store.ItemsTable[id][2] )
self:ChatPrint( “You bought " … Store.ItemsTable[id][1] … " for " … tonumber(Store.ItemsTable[id][2]) … " tokens.” )
end
elseif id == 5 then
if self:CanBuy() == false or “tord” then
self:ChatPrint(“Please wait for the round to start before you buy anything.”)
else
for k, v in pairs(Store.SecondaryWeaponTable) do
if self:HasWeapon(v[1]) then
self:DropNamedWeapon(v[1])
break
end
end
self:Give(“weapon_zm_revolver”)
self:GiveAmmo(36, “AlyxGun”)
self:TakeTokens( Store.ItemsTable[id][2] )
self:ChatPrint( “You bought " … Store.ItemsTable[id][1] … " for " … tonumber(Store.ItemsTable[id][2]) … " tokens.” )
end
elseif id == 6 then
if self:CanBuy() == false or “tord” then
self:ChatPrint(“Please wait for the round to start before you buy anything.”)
else
for k, v in pairs(Store.PrimaryWeaponTable) do
if self:HasWeapon(v[1]) then
self:DropNamedWeapon(v[1])
break
end
end
self:Give(“weapon_zm_shotgun”)
self:GiveAmmo(24, “Buckshot”)
self:TakeTokens( Store.ItemsTable[id][2] )
self:ChatPrint( “You bought " … Store.ItemsTable[id][1] … " for " … tonumber(Store.ItemsTable[id][2]) … " tokens.” )
end
elseif id == 7 then
if self:CanBuy() == false or “tord” then
self:ChatPrint(“Please wait for the round to start before you buy anything.”)
else
for k, v in pairs(Store.PrimaryWeaponTable) do
if self:HasWeapon(v[1]) then
self:DropNamedWeapon(v[1])
break
end
end
self:Give(“weapon_zm_sledge”)
self:TakeTokens( Store.ItemsTable[id][2] )
self:ChatPrint( “You bought " … Store.ItemsTable[id][1] … " for " … tonumber(Store.ItemsTable[id][2]) … " tokens.” )
end
elseif id == 8 then
if self:CanBuy() == false or “tord” then
self:ChatPrint(“Please wait for the round to start before you buy anything.”)
else
for k, v in pairs(Store.PrimaryWeaponTable) do
if self:HasWeapon(v[1]) then
self:DropNamedWeapon(v[1])
break
end
end
self:Give(“weapon_zm_rifle”)
self:GiveAmmo(20, “357”)
self:TakeTokens( Store.ItemsTable[id][2] )
self:ChatPrint( “You bought " … Store.ItemsTable[id][1] … " for " … tonumber(Store.ItemsTable[id][2]) … " tokens.” )
end
elseif id == 9 then
if self:CanBuy() == false or “tord” then
self:ChatPrint(“Please wait for the round to start before you buy anything.”)
else
for k, v in pairs(Store.PrimaryWeaponTable) do
if self:HasWeapon(v[1]) then
self:DropNamedWeapon(v[1])
break
end
end
self:Give(“weapon_zm_mac10”)
self:GiveAmmo(60, “SMG1”)
self:TakeTokens( Store.ItemsTable[id][2] )
self:ChatPrint( “You bought " … Store.ItemsTable[id][1] … " for " … tonumber(Store.ItemsTable[id][2]) … " tokens.” )
end
else
if self:CanBuy() == false or “tord” then
self:ChatPrint(“Please wait for the round to start before you buy anything.”)
else
for k, v in pairs(Store.PrimaryWeaponTable) do
if self:HasWeapon(v[1]) then
self:DropNamedWeapon(v[1])
break
end
end
self:Give(“weapon_ttt_m16”)
self:GiveAmmo(60, “Pistol”)
self:TakeTokens( Store.ItemsTable[id][2] )
self:ChatPrint( “You bought " … Store.ItemsTable[id][1] … " for " … tonumber(Store.ItemsTable[id][2]) … " tokens.” )
end
end
end
end

function _R.Player:CanBuy( )
if self:Team() == TEAM_SPEC then return “tord” end
if !self:Alive() then return “tord” end

if GetRoundState() == ROUND_PREP then
	return true
elseif GetRoundState() == ROUND_ACTIVE then
	return true
elseif GetRoundState() == ROUND_POST then
	return "tord"
end

end
[/lua]

Change every [lua]if self:CanBuy() == false or “tord” then[/lua] to [lua]if not self:CanBuy() then[/lua]and in lines 238-249 change every [lua]return “tord”[/lua] to [lua]return false[/lua]

Basically, what you were doing is asking along the lines of “If self:CanBuy is equal to false, or if the string “tord” is valid”, when what you really wanted is “If self:CanBuy is not true”
When you put it in an if statement, a string value is always assumed to be true

Oh thanks :smiley: I didn’t know that :slight_smile: