Суббота, 23 Ноября 2024, 02:32

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Браузерная игра: действие в процессе
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
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг