![]() |
Как работает Стратегия?
Вот такой вопрос. Научился работать с базой данных, сделал пару игр с использованием дб по способу "Записал уровень, деньги и.т.п". Т.е. прямая запись.
Теперь меня затронул другой вопрос. Хочу сделать стратегию, но не знаю как правильно реализовать базу данных. Т.е. к примеру, человек нажал на кнопку выучить какой то навык, который будет учиться 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 интересующего навыка>", чтобы по таймерам не грузить весь список, когда это не надо. Ну вот как бы это делал я. Но может это все чушь или не самое лучшее решение — надо чтобы кто-то из опытных что посоветовал. |
Надежней будет проверять время при самой уже записи, а не синхронизировать его с не понятным клиентом на стороне которого может произойти со временем что угодно. Клиент вобще должен только отображать то, что происходит на сервере и отправлять запросы на какие то действия
При старте устанавливаем таймер на разницу в текущем времени ( которое взяли с сервера ) и временем окончанием "прокачки" ( тоже с сервера взяли ( записанное в базу )) при срабатывании таймера отправляем данные на сервер, где уже берем текущее время и сравниваем, если все плохо ( не совпало/раньше и т/д/ ) отправляем назад в приложение текущее время и время окончания и опять ставим таймер, тут нада конечно добавить, что к времени таймеру стоит добавлять не много миллисекунд, либо на сервере делать допуск при проверке. Все действия конечно должны происходит через проверку приложения, например придумайте схему идентификации приложения на сервере и при всех действиях ( ну разве, что можно исключить запросы на получения данных ) проверяйте валидное ли приложение схем может быть много |
а что изменилось?
|
Цитата:
|
Цитата:
|
| Часовой пояс GMT +4, время: 05:53. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.