Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Вилки Выкидные
-3 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471
1

Регенерация по времени

01.07.2017, 17:44. Просмотров 250. Ответов 2
Метки нет (Все метки)

Здравствуйте!

В ячейке hp - текущее значение, maxhp - максимальное значение, устанавливаемое скриптом по времени, uphp - время с которого стартует скрипт.

Вот такой вот код:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if ($user['hp'] >= 0) {
        if ($user['hp'] < $user['maxhp']) {
            $up = (time() - $user['uphp']) / 10;// +1 к hp каждые 10 секунд
            $hp = $user['hp'] + $up;
            if ($hp < $user['maxhp']) {
                if ($up >= 1) {
                    query('UPDATE robo_users SET hp = :hp, uphp = :up WHERE id = :id LIMIT 1', [':hp' => $hp, ':up' => time(), ':id' => id]);
                }
            } else {
                query('UPDATE robo_users SET hp = maxhp WHERE id = :id LIMIT 1', [':id' => id]);
            }
        } else {
            query('UPDATE robo_users SET hp = maxhp WHERE id = :id LIMIT 1', [':id' => id]);
        }
    } else {
        query('UPDATE robo_users SET hp = 0 WHERE id = :id LIMIT 1', [':id' => id]);
    }
Так вот есть ещё локация, где происходит уменьшение maxhp (например перестал действовать бонус), но при этом срабатывает условие - если hp > maxhp, то уравниваем их значения.

Вопрос: Как поправить скрипт, чтобы при уменьшении maxhp, не срабатывало условие на приравнивание hp к maxhp, то есть значение hp нужно оставить без изменения (оно потом будет уменьшено ниже maxhp и потом будет регенерироваться до нужного значения maxhp) сразу после уменьшения maxhp.

p.s. удалить строки с апдейтом на maxhp нельзя, так как появляется баг, при длительном отсутствии активности на сайте переменная $up (присваиваемая hp) превысит значение maxhp, а она должны быть <=

Вообщем, кому будет интересно на досуге, то подкиньте идей, а то у меня в глазах рябит уже и не улавливаю, где косяк.

Спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2017, 17:44
Ответы с готовыми решениями:

MySQL регенерация одним запросом с учётом прошедшего времени
Здравствуйте! Есть пару вопросов: MySQL::run('update users set hp = hp +...

Регенерация картинок
Всем дорого времени суток, подскажите есть ли аналог функции Wordpressd &quot;regenerate thumbnails&quot; у...

Регенерация памяти
Проблема такая: нужно написать программу перепрограммирующую частоту регенерации памяти на 2-3...

Регенерация ОЗУ -это....?
Регенерация ОЗУ -это....? Что такое Регенерация ОЗУ если можно поподробнее это для курсового)))

Расчет времени пуска,установившегося времени,времени торможения и паузу для лифта
t0=(3600/h)*(1-E) - пауза.ЕЕ можно взять произвольно(самим). А остальное надо высчитывать....

2
Fart83
55 / 59 / 34
Регистрация: 04.10.2016
Сообщений: 277
01.07.2017, 17:46 2
прально понял:

нужно в соответствии со временем изменить текущее значение hp?
1
Вилки Выкидные
-3 / 47 / 17
Регистрация: 25.04.2017
Сообщений: 471
01.07.2017, 18:28  [ТС] 3
Цитата Сообщение от Fart83 Посмотреть сообщение
нужно в соответствии со временем
нет, чтобы при уменьшении maxhp не срабатывало

PHP
1
query('UPDATE robo_users SET hp = maxhp WHERE id = :id LIMIT 1', [':id' => id]);
maxp должно потом начать работать, когда юзер уменьшит hp и оно станет меньше maxhp (то есть оставить без изменения значение hp, полученное до уменьшения maxhp)

На пальцах - пользун получил бонус, время его действия закончилось, максимальное значение уменьшилось, но нужно пользуну дать израсходовать бонус.

А у меня косяк, по окончании действия бонуса уменьшается максимальное значение и оно присваивается текущему (снимает бонус).

Добавлено через 25 минут
Решил, но способом тыка, второй апдейт не нужен оказывается

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if ($user['hp'] >= 0) {
        if ($user['hp'] < $user['maxhp']) {
            $up = (time() - $user['uphp']) / 10;
            $hp = $user['hp'] + $up;
            if ($hp < $user['maxhp']) {
                if ($up >= 1) {
                    query('UPDATE robo_users SET hp = :hp, uphp = :up WHERE id = :id LIMIT 1', [':hp' => $hp, ':up' => time(), ':id' => id]);
                }
            } else {
                query('UPDATE robo_users SET hp = maxhp WHERE id = :id LIMIT 1', [':id' => id]);
            }
        }
    } else {
        query('UPDATE robo_users SET hp = 0 WHERE id = :id LIMIT 1', [':id' => id]);
    }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2017, 18:28

Алгоритм распределения задач с учетом их важности, времени поступления и времени обработки
Задание составить алгоритм распределения задач с учетом их важности, времени поступления и времени...

Почему при записи даты и времени из формы в бд, к времени прибавляется час?
Здравствуйте, при записи даты и времени из формы в бд, к времени прибавляется час, почему так...

Написать программу,вычисляющую время,прошедшее от времени Т1 до времени Т2,считая Т2>Т1.
Написать программу,вычисляющую время,прошедшее от времени Т1 до времени Т2,считая Т2&gt;Т1. если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru