Все финансы считайте на сервере, иначе вашу программу можно будет легко обмануть. Чтобы защититься от совсем уж детских ошибок, реализуйте финансовую логику отдельным объектом, в идеале даже на стороннем движке, например на процедурах в базе данных (это самое логичное место) чтобы за атомарность и непротиворечивость данных отвечал надежный движок базы данных.
Если вам нужно чтобы балансы пользователей зависили от времени вне игры пользователя, то либо, отслеживайте время и вход и выход пользователя, и в момент каждого следующего входа, корректируйте балансы от времени и иной логики, либо в методе, возвращающем текущий баланс, сделайте формулу, которая будет каждый раз вычислять по вашей логике, сколько нужно прибавить к сохраненному балансу-константе от времени, с момента создания игры пользователем. Ггрубо говоря у вас будет не одна валюта а две/несколько, но под капотом, при подсчете итогового баланса вы просто суммируете имеющиеся валюты, какие то являются виртуальными - т.е. у которых нет текущего баланса и он вычисляется из времени или еще чего то, а какие то только число в базе.