bestxp
11.11.2013 - 10:38
тогда у тебя должен быть фоновый скрипт демона который за "тик" пересчитывает данные, в твоем случае запускает хранимку в бд, которая производит расчет всех данных и так каждый тик,
соотвественно тик может быть определенным периодом например раз в "10" секунд, за которое и идет прибавка ресурса или прочего значения.
То есть в любом случае это должен быть фоновый скрипт, а тут уже несколько вариантов, php демон или какой либо другой, сам смотри что лучше
waldicom
11.11.2013 - 14:56
Цитата (damage220 @ 11.11.2013 - 06:00) |
А если нужно, чтобы результат действий одного игрока видели все игроки? При этом, делать лишние проверки всем пользователям не совсем рационально с точки зрения экономии ресурсов сервера. Суть примерна в том же: игрок ставит действие на выполнение и покидает сайт. Через час, например, действие выполняется, но изменения должны коснуться всего мира именно в ту секунду, когда и выполнились - нельзя ждать, пока пользователь появиться снова. |
И это тоже можно рассчитать на JS. Будет, правда, посложнее, но тоже реализуемо. Т.е. придется весь рассчет не только в БД делать, но еще и передавать все параметры клиенты (javascript), который будет сам рассчитывать и показывать. С каждым новым запросом данные будут обновляться.
Правда надо уточнить, что значит "чтобы результат действий одного игрока видели все игроки"? Если игроков 100 тыщ, то такой подходит будет, как минимум, проблематичным

А зачем вам говорить всем игрокам, что что-то изменилось?
_____________
Свои мозги еще никто не отменял.
Телепатов нету.
inpost
11.11.2013 - 15:18
Зачем другим знать количество твоих ресурсов?
Что-то этот момент не совсем понял. Взаимодействие будет лишь мини-частичным, отсюда хорошо впишется какой-нибудь фоновый веб-сервер на ПХП или node.js (там socket.io добавить ещё, если динамика велика).
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
damage220
11.11.2013 - 20:16
Игроки не изолированы друг от друга, они могут воевать. К примеру, взять игру Ogame - космический симулятор. Там игрок может напасть на планету другого игрока, в результате баталии образуется поле обломков и это поле должны видеть все игроки. Если игрок отправит флот на вражескую планету и уйдет с сайта, то глобальные изменения можно будет произвести только тогда, когда он снова появиться в игре.
inpost
11.11.2013 - 23:39
Для ресурсов не нужен был фоновый сервер, но сервер нужен для общих событий, которые происходят через Х времени.
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
waldicom
11.11.2013 - 23:54
Цитата (damage220 @ 11.11.2013 - 17:16) |
Если игрок отправит флот на вражескую планету и уйдет с сайта, то глобальные изменения можно будет произвести только тогда, когда он снова появиться в игре. |
Еще раз: все события инициируются игроками. Будь то нападение на другую планету или постройки здания.
Я просто не знаю всех тонкостей игры. Но если уж очень нужно, то можно и каждую секунду считать. Вопрос тольк в том, выдержит ли сервер и нужно ли это вообще.
У вас сейчас какая конкретных проблема? Проблема с рассчитывавшем ресурсов решена?
_____________
Свои мозги еще никто не отменял.
Телепатов нету.
damage220
12.11.2013 - 00:35
Цитата (waldicom @ 11.11.2013 - 23:54) |
Цитата (damage220 @ 11.11.2013 - 17:16) | Если игрок отправит флот на вражескую планету и уйдет с сайта, то глобальные изменения можно будет произвести только тогда, когда он снова появиться в игре. |
Еще раз: все события инициируются игроками. Будь то нападение на другую планету или постройки здания. Я просто не знаю всех тонкостей игры. Но если уж очень нужно, то можно и каждую секунду считать. Вопрос тольк в том, выдержит ли сервер и нужно ли это вообще. У вас сейчас какая конкретных проблема? Проблема с рассчитывавшем ресурсов решена?
|
Да, с ресурсами всё ок.
Такая ситуация: игрок атакует планету другого игрока, посылая флот. Этот флот летит n часов, игрок выходит с сайта. Через n часов флот встречает сильное сопротивление и полностью уничтожается(или частично - не важно). В результате на орбите планеты образуется поле обломков. Это поле должны видеть все игроки после битвы. Чтобы его видели, нужна запись в бд с количеством обломков. Количество обломков не константа и зависит от количества оборонительных сооружений, а их количество тоже может измениться за время полета. Выходит расчет нужно вести только во время прилета флота на вражескую планету. Поправьте, если не так.
damage220
12.11.2013 - 01:43
Уже подумал, что нашел решение:
Каждая атака - это запись в бд, с временем прибытия. При каждом обновлении страницы, не важно какого игрока, будет находиться те атаки, которые уже прошли и просчитывать результат. Но тут, помимо того, что это крайне ресурсоёмко, если записей много, есть серьезная проблема. Допустим такая битва есть, но она могла пройти и час назад до перезагрузки страницы, нет никакой возможности узнать какая защита было у обороняющегося в тот моммент времени.
waldicom
12.11.2013 - 02:59
Цитата (damage220 @ 11.11.2013 - 22:43) |
Допустим такая битва есть, но она могла пройти и час назад до перезагрузки страницы, нет никакой возможности узнать какая защита было у обороняющегося в тот моммент времени. |
Хм... Ок, в данном случае или рассчитывать все битвы в порядке очереди при любом запроче игрока или действительно вводить фоновый процесс.
Если будете работать с очередью, то обратите внимание на redis. Да, в первую очередь это конечно key-value storage, но он предлагает функцию queue. Или можно взять gearman. В крайне случае реализовать свою очередь. В любом случае головной боли прибавится.
Если вводить фоновый процесс, то все равно надо будет использовать/имплементировать очередь событий.
_____________
Свои мозги еще никто не отменял.
Телепатов нету.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.