Я бы занес в базу такой параметр, как скорость регенерации, при каждом обращении клиента к серверу - проверял бы, не пора бы регенерировать жизнь. Для того, что бы это было безопасно, вам надо проверить не только время нанесения последнего урона, но и время последней регенерации.
Иными словами, в базе будем хранить:
урон(кол-во, время наненсеня)
регенерация(сколько едениц регенерировать, как часто, время последней регенерации)
При обращении клиента к серверу(рекомендую сделать некий запрос poll, который будет запрашивать необработанные игровые события, такие как регенерация) спрашиваем, сколько у игрока жизней. Если меньше 100, то проверяем, дату нанесения последнего урона и можем ли мы пользователю отрегенить жизнь, если да, то делаем это и возвращаем клиенту событие регенерации, которое он отрисует уже как хочет.
Регенирировать мы можем в следующих случаях:
- Пользователь получил урон, но еще небыло регенераций, а время регенерации уже >= текщему времени - время нанесения урона
- Пользователь получил урон, регенерации были, и время регенерации уже >= текущему времени - время последней регенерации
По такой схеме Вы сможете не только в "реальном времени"(конечно, это не websockets, но все же) регенирировать игрока, но и, например, если он был в оффлайн и не поллил игровые события вычислить сколько жизней он отрегенил, пока был оффлайн.
Полл-запрос можете делать, например, каждую секунду. Ну и вообще, присмотритесь к идеям, которые я Вам изложил, особенно про игровые события и полл. Я имею некий опыт в геймдеве, в том числе на PHP и эта практика для небольших игр довольно неплохо себя зарекомендовала.