![]() |
Как работает Стратегия?
Вот такой вопрос. Научился работать с базой данных, сделал пару игр с использованием дб по способу "Записал уровень, деньги и.т.п". Т.е. прямая запись.
Теперь меня затронул другой вопрос. Хочу сделать стратегию, но не знаю как правильно реализовать базу данных. Т.е. к примеру, человек нажал на кнопку выучить какой то навык, который будет учиться 2 часа. Хорошо, с этим все понятно, записать timestamp в базу, а потом при следующем входе игрока проверить прежний timestamp, если время прошло, значит навык выучен. Вот сам вопрос, а что если этих навыков десятки?? Десятки навыков одновременно учатся (десятки таймстепов и уровней навыка находятся в бд). Не писать же все тайм степы и уровни навыков в одну строку вместе с данными игрока... Если кто то имеет опыт в стратегиях, просьба помочь, все таки это не легко и интересно. |
Ну наверняка у стратегии сервер - демон. Записать timestamp ради сохранения прокачки в случае краша сервера, а сам таймер тикает в памяти.
|
Psycho Tiger
а сам таймер тикает в памяти А можно поподробней об этом. Т.е. память php скрипта, или что? Скажите пожалуйста ключевое слово, по какому мне найти мануалы с использованием этого. Это снимет нагрузку на сервер? Ну на бд... И еще, по какому принципу работает счетчик "кто онлайн", я знаю что ежесекундно подается пакет на сервер, что человек в сети. Я так понял этот тоже пхп память? |
Код:
table skillsКод:
user_skills_progressКод:
user_skills |
Zebestov
Спасибо большое. Но вот еще по поводу правельности чтения хотел узнать. При входе в игру, игрок, должен получить состояние всех своих навыков из user_skills_progress. Если какой то навык выучен, записать его в user_skills. Главный вопрос заключается в том, будет ли такие постоянные обращения к базе данных нагружать сервер? Помимо этого передача результата (действия) игрока будет очень часто предаваться и записыватся в базу |
Ну во-первых надо определиться в терминологии: игрок ничего не записывает, это должен делать сервер.
При входе синхронизируешь время с сервером. Также при входе клиент получает от сервера ответ, в котором содержится список текущих навыков на прокачке: Код:
{Код AS3:
Следует отметить, что в запросе http://myserver.com/api/?method=getSkillsProgress следует предусмотреть необязательный "&sid=<id интересующего навыка>", чтобы по таймерам не грузить весь список, когда это не надо. Ну вот как бы это делал я. Но может это все чушь или не самое лучшее решение — надо чтобы кто-то из опытных что посоветовал. |
Надежней будет проверять время при самой уже записи, а не синхронизировать его с не понятным клиентом на стороне которого может произойти со временем что угодно. Клиент вобще должен только отображать то, что происходит на сервере и отправлять запросы на какие то действия
При старте устанавливаем таймер на разницу в текущем времени ( которое взяли с сервера ) и временем окончанием "прокачки" ( тоже с сервера взяли ( записанное в базу )) при срабатывании таймера отправляем данные на сервер, где уже берем текущее время и сравниваем, если все плохо ( не совпало/раньше и т/д/ ) отправляем назад в приложение текущее время и время окончания и опять ставим таймер, тут нада конечно добавить, что к времени таймеру стоит добавлять не много миллисекунд, либо на сервере делать допуск при проверке. Все действия конечно должны происходит через проверку приложения, например придумайте схему идентификации приложения на сервере и при всех действиях ( ну разве, что можно исключить запросы на получения данных ) проверяйте валидное ли приложение схем может быть много |
а что изменилось?
|
Цитата:
|
Цитата:
|
Спасибо Zebestov и easy.proger
Пришел к одному выводу. При входе игру, сервер сам проверяет все навыки, если все ок, навык выучен, сервер отправляет в клиент данные, что навык выучен. Если же не выучен, сервер отправляет время, сколько осталось (в сек.) до изучения навыка. В обшем все достаточно легко, только таких навыков могут быть сотни. Сильно ли будет грузить проверка всех навыков (когда человек вошел в игру) сервер? Добавлено через 1 минуту Цитата:
|
Вся эта проверка при подключении пользователя сводится к простому SELECT из бд и составлению JSON (например) ответа с проверкой на больше/меньше в одном месте. В случае чего — один DELETE и один INSERT.
Не думаю, что все это сильная нагрузка на любой даже середнячковый сервер. |
Цитата:
Добавлено через 4 минуты Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
|
| Часовой пояс GMT +4, время: 07:25. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.