Как создать скрипт работающий без участия пользователя?
Крон в этом случае плохое решение. По факту вам надо оперировать только таймерами. Начисление денег за время что не были в игре делается легко. Просто берете разницу между последним начислением и текущем временем и даете денег юзеру сохраняя время начисления. Увеличение атаки можно сделать следующим образом. Например у нас есть таблица с эффектами которые цепляются на юзера. Основная задача этой таблицы - хранить таймпштамп когда этот эффект будет не активен. При активации эффекта мы его добавляем в эту таблицу, а дальше каждый раз когда считаем урон просто проверяем не истекло ли еще время действия эффекта. Проверка будет происходить каждый запрос. Это будет сильно дешевле чем раз в секунду пинать крон, да и более правильно как по мне.
Почитайте о Cron. На сервере пишете скрипт который проверяет информацию об эффектах и бонусы, и сверяет время. Если время прошло - удаляет запись из БД. В крон добавляете задачу запускать скрипт каждые 2 минуты (или как вам надо) и все