Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flasher.ru > Флейм

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 11.09.2010, 04:03
deman455 вне форума Посмотреть профиль Отправить личное сообщение для deman455 Найти все сообщения от deman455
  № 1  
Ответить с цитированием
deman455
[+1 25.04.11]

Регистрация: Nov 2009
Сообщений: 481
Отправить сообщение для deman455 с помощью ICQ
Attention Как работает Стратегия?

Вот такой вопрос. Научился работать с базой данных, сделал пару игр с использованием дб по способу "Записал уровень, деньги и.т.п". Т.е. прямая запись.
Теперь меня затронул другой вопрос. Хочу сделать стратегию, но не знаю как правильно реализовать базу данных. Т.е. к примеру, человек нажал на кнопку выучить какой то навык, который будет учиться 2 часа.
Хорошо, с этим все понятно, записать timestamp в базу, а потом при следующем входе игрока проверить прежний timestamp, если время прошло, значит навык выучен.
Вот сам вопрос, а что если этих навыков десятки?? Десятки навыков одновременно учатся (десятки таймстепов и уровней навыка находятся в бд). Не писать же все тайм степы и уровни навыков в одну строку вместе с данными игрока...

Если кто то имеет опыт в стратегиях, просьба помочь, все таки это не легко и интересно.

Старый 11.09.2010, 14:23
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 2  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Ну наверняка у стратегии сервер - демон. Записать timestamp ради сохранения прокачки в случае краша сервера, а сам таймер тикает в памяти.

Старый 11.09.2010, 18:01
deman455 вне форума Посмотреть профиль Отправить личное сообщение для deman455 Найти все сообщения от deman455
  № 3  
Ответить с цитированием
deman455
[+1 25.04.11]

Регистрация: Nov 2009
Сообщений: 481
Отправить сообщение для deman455 с помощью ICQ
Psycho Tiger
а сам таймер тикает в памяти
А можно поподробней об этом. Т.е. память php скрипта, или что? Скажите пожалуйста ключевое слово, по какому мне найти мануалы с использованием этого. Это снимет нагрузку на сервер? Ну на бд...

И еще, по какому принципу работает счетчик "кто онлайн", я знаю что ежесекундно подается пакет на сервер, что человек в сети. Я так понял этот тоже пхп память?

Старый 11.09.2010, 18:39
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 4  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Код:
table skills
-------------------------------------------------
sid - id навыка
title - название
period1 -сколько развивать до уровня 1
period2 -сколько развивать до уровня 2
period3 -сколько развивать до уровня 3
Код:
user_skills_progress
-------------------------------------------------
uid - id пользователя*
sid - id навыка*
tolevel - до какого уровня качаем
time - timestamp начала прокачки

*первые два поля — составной ключ
вот ты и сохранил для всех пользователей все их навыки, которые они в данный момент качают. по факту достижения уровня конкретного навыка потираешь запись о нем в user_skills_progress и делаешь запись в таблице user_skills

Код:
user_skills
-------------------------------------------------
uid - id пользователя*
sid - id навыка*
level - текущий уровень навыка
time - timestamp окончания прокачки (на усмотрение)

*первые два поля — составной ключ
__________________
Поймай яблоко 2!

Старый 11.09.2010, 19:28
deman455 вне форума Посмотреть профиль Отправить личное сообщение для deman455 Найти все сообщения от deman455
  № 5  
Ответить с цитированием
deman455
[+1 25.04.11]

Регистрация: Nov 2009
Сообщений: 481
Отправить сообщение для deman455 с помощью ICQ
Zebestov
Спасибо большое.
Но вот еще по поводу правельности чтения хотел узнать.

При входе в игру, игрок, должен получить состояние всех своих навыков из user_skills_progress. Если какой то навык выучен, записать его в user_skills.

Главный вопрос заключается в том, будет ли такие постоянные обращения к базе данных нагружать сервер? Помимо этого передача результата (действия) игрока будет очень часто предаваться и записыватся в базу

Старый 11.09.2010, 21:52
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 6  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Ну во-первых надо определиться в терминологии: игрок ничего не записывает, это должен делать сервер.

При входе синхронизируешь время с сервером. Также при входе клиент получает от сервера ответ, в котором содержится список текущих навыков на прокачке:
Код:
{
	skill_id : 'id навыка',
	skill_title : 'название',
	start : 'timestamp начала прокачки',
	stop : 'timestamp окончания',
	done : '0|1' — завершена ли прокачка
}
Для каждого незавершенного навыка (done == 0):
Код AS3:
// currentLocalTimestamp - текущее синхронизированное время
// PARU_SEKUNDEN - некий запас по времени в пределах пинга (max ? avg). чтобы наверняка
 
var skillTimer:Timer = new Timer(currentSkill.stop - currentLocalTimestamp + PARU_SEKUNDEN, 1);
skillTimer.addEventListener(TimerEvent.TIMER, hanlder_currentSkillComplete);
skillTimer.start();
Ну а уже в hanlder_currentSkillComplete() ты снова запрашиваешь сервер на предмет текущих прокачек (как вначале) и убеждаешься что теперь навык с нужным id пришел с флагом done == 1. В случае если нет, наверное стоит повторить операцию раз-другой с небольшим интервалом. Если так ничего и не вышло — вызывай метод shoZaDela() и формируй баг-репорт

Следует отметить, что в запросе http://myserver.com/api/?method=getSkillsProgress следует предусмотреть необязательный "&sid=<id интересующего навыка>", чтобы по таймерам не грузить весь список, когда это не надо.

Ну вот как бы это делал я. Но может это все чушь или не самое лучшее решение — надо чтобы кто-то из опытных что посоветовал.
__________________
Поймай яблоко 2!

Старый 12.09.2010, 00:28
easy.proger вне форума Посмотреть профиль Отправить личное сообщение для easy.proger Найти все сообщения от easy.proger
  № 7  
Ответить с цитированием
easy.proger

Регистрация: Jun 2010
Адрес: somewhere in the universe
Сообщений: 195
Надежней будет проверять время при самой уже записи, а не синхронизировать его с не понятным клиентом на стороне которого может произойти со временем что угодно. Клиент вобще должен только отображать то, что происходит на сервере и отправлять запросы на какие то действия

При старте устанавливаем таймер на разницу в текущем времени ( которое взяли с сервера ) и временем окончанием "прокачки" ( тоже с сервера взяли ( записанное в базу )) при срабатывании таймера отправляем данные на сервер, где уже берем текущее время и сравниваем, если все плохо ( не совпало/раньше и т/д/ ) отправляем назад в приложение текущее время и время окончания и опять ставим таймер, тут нада конечно добавить, что к времени таймеру стоит добавлять не много миллисекунд, либо на сервере делать допуск при проверке. Все действия конечно должны происходит через проверку приложения, например придумайте схему идентификации приложения на сервере и при всех действиях ( ну разве, что можно исключить запросы на получения данных ) проверяйте валидное ли приложение схем может быть много

Старый 12.09.2010, 00:33
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 8  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
а что изменилось?
__________________
Поймай яблоко 2!

Старый 12.09.2010, 00:41
easy.proger вне форума Посмотреть профиль Отправить личное сообщение для easy.proger Найти все сообщения от easy.proger
  № 9  
Ответить с цитированием
easy.proger

Регистрация: Jun 2010
Адрес: somewhere in the universe
Сообщений: 195
Цитата:
Сообщение от Zebestov Посмотреть сообщение
а что изменилось?
Изменился сам подход к задаче, я предлагаю не синхронизировать время с самим флешом, а просто ставить таймер и проводить операцию только на сервере, то есть при срабатывании таймера не слать - навык "прокачан", а слать попытку установить значение навыка в прокачан.

Старый 12.09.2010, 02:39
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 10  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от easy.proger Посмотреть сообщение
Изменился сам подход к задаче, я предлагаю не синхронизировать время с самим флешом, а просто ставить таймер и проводить операцию только на сервере, то есть при срабатывании таймера не слать - навык "прокачан", а слать попытку установить значение навыка в прокачан.
Я полагаю, что лучше клиент пускай отсчитывает миллисекунды и в нужный момент сдает "домашнее задание" серверу на проверку, нежели сервак будет трещать по швам от миллионов таймеров за каждым подключенным к нему клиентом.
__________________
Поймай яблоко 2!

Создать новую тему Ответ Часовой пояс GMT +4, время: 04:36.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 04:36.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.