create table users (
user_id varchar(10) primary key,
... --standard junk you already have here
turns_left int default 0,
last_turn datetime default getdate()
)
create table misc (
tag varchar(32) primary key,
val varchar(128)
)
go
insert misc (tag, val) values ('Turns_Per_Day', '5')
insert misc (tag, val) values ('Max_Turns_Allowed', '15')
####
create proc compute_turns_left
@user_id varchar(10)
as
declare @days integer, @turns, @turns_per_day, @max_turns
-- Read the configuration variables
select @turns_per_day = isnull(convert(int, val), 1)
from misc where tag='Turns_Per_Day'
select @max_turns = isnull(convert(int, val), 1)
from misc where tag='Max_Turns_Allowed'
-- How many days since they last used a turn?
select @days=datediff(d,getdate(),last_turn)
from users where user_id=@user_id
-- Update their turns
update turns_left = turns_left + @days * @turns_per_day
from users where user_id=@user_id
-- And apply the limit cap
update turns_left = @max_turns
from users where user_id=@user_id and turns_left > @max_turns
go
####
create proc consume_turn
@user_id varchar(10)
as
update users set turns_left = turns_left-1, last_turn=getdate()
where user_id=@user_id
go