Браузерная игра: действие в процессе
|
|
andrewnet | Дата: Суббота, 13 Октября 2012, 19:30 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Как менять значения в бд в процессе. Например, есть в бд "переменная" хп. Мне нужно каждые 5 сек увеличивать значение пока не станет макс. как мне это сделать?
|
|
| |
jc04 | Дата: Суббота, 13 Октября 2012, 21:05 | Сообщение # 2 |
почетный гость
Сейчас нет на сайте
| Никак. Но это можно "обойти". Вместе с переменной ставят поле - штамп времени, и при следующем обращении к "переменной" вычисляют разницу между "тогда" и "сейчас", и после этого увеличивают на сколько надо "переменную".
Моя игра: Браузерный Сталкер Игра в разработке: Аномалия
|
|
| |
andrewnet | Дата: Суббота, 13 Октября 2012, 22:10 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| А можно по подробнее про поле и штамп времени.
|
|
| |
BolT-007 | Дата: Понедельник, 15 Октября 2012, 12:06 | Сообщение # 4 |
был не раз
Сейчас нет на сайте
| У меня примерно такой же вопрос. кому поручить выполнение запланированых событий? Если пишем на PHP. например поставили работать на 2 часа, и закрыли браузер. через два часа работа должна закончиться. не поручишь же эту задачу странице другого игрока. должен быть какой нибудь модуль который будет обсчитывать это дело каждые N секунд и править БД. Возможно ли написать скрипт, который совершил действие через некоторое время?
Сообщение отредактировал BolT-007 - Понедельник, 15 Октября 2012, 12:09 |
|
| |
Assasin | Дата: Понедельник, 15 Октября 2012, 19:32 | Сообщение # 5 |
web-coder
Сейчас нет на сайте
| 1. cron 2. Пост №2
|
|
| |
jc04 | Дата: Понедельник, 15 Октября 2012, 20:33 | Сообщение # 6 |
почетный гость
Сейчас нет на сайте
| Объясняю еще раз. Никто не меняет такие данные в браузерных играх в реальном времени, по многим причинам. Делают примерно так:
Code $now = date('Y-m-d H:i:s'); $query = 'UPDATE game_chars SET time_work_begin = "' . $now . '", work_hours = "' . $hours . '" WHERE char_id = ' . $char_id;
Записали в базу время когда начал работать и "забыли", т.е. никто не проверяет и не смотрит сколько времени прошло или осталось. Смотрят только когда этот игрок в следующий раз откроет страничку, только тогда начинают считать. Т.е. у нас есть время когда начал работать и можно узнать сколько времени сейчас. Из этого можно высчитать сколько времени прошло с того времени как начал работать. Если отработал то что планировал - получи зарплату, если нет - вывели на экран сколько осталось работать.
Моя игра: Браузерный Сталкер Игра в разработке: Аномалия
Сообщение отредактировал jc04 - Понедельник, 15 Октября 2012, 20:36 |
|
| |
BolT-007 | Дата: Вторник, 16 Октября 2012, 09:45 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| спасибо, буду искать обходные пути. Просто до этого создавал обычные, офлайновые игры, так там это осноной постулат, что все действия выполняются централизвано, каждый кадр.
|
|
| |
jc04 | Дата: Вторник, 16 Октября 2012, 11:30 | Сообщение # 8 |
почетный гость
Сейчас нет на сайте
| Очень часто мы в браузере можем видеть, что например здоровье прибавляется или видим как уменьшается время до окончания работы. Это делается таймером обратного отсчета с помощью javascript а не php. Т.е. на страничке, открытой игроком, висит таймер на javascript, и считает, но в самой базе изменений не происходит. Изменения произойдут только когда пользователь заново обратиться за данными из базы - обновит страничку или откроет другие странички. И не вздумайте передавать данные таймеров со странички в базу данных, расчёт здоровья или времени работы должен производиться только с данных из базы а не с тех, что передаст пользователь. Иначе могут читерить, т.е. не будут ждать пока таймер отсчитает положенной время, а сразу передадут информациу, как буд-то необходимое время прошло.
Моя игра: Браузерный Сталкер Игра в разработке: Аномалия
Сообщение отредактировал jc04 - Вторник, 16 Октября 2012, 11:34 |
|
| |