Pull to refresh

Comments 29

Только вчера перечитывал первую статью вашу ) Спасибо!
Всегда пожалуйста :). Надеюсь, материал и будущих статей будет для Вас интересен.
Не вполне технический комментарий, скорее про бизнес в целом — сделано достаточно хорошо, потрачено много человеко часов, но неужели не нашлось 5 минут посмотреть в wiki статью про литий? С каких пор Литий ru.wikipedia.org/wiki/%D0%9B%D0%B8%D1%82%D0%B8%D0%B9 — тяжелый метал?
Сценаристы работают за еду?
Спасибо за похвалу.
Про литий. Сюжет пишут филологи. Потому что они действительно умеют писать. А вот со знанием таблицы Менделеева у них проблемы. А эту ошибку нашли уже когда все озвучили (и приняли озвучку у актеров), так что переделывать не стали.
Я «старый IT-шник и не знаю слов любви» :-)
Проект явно хорошо вылизан. не скажу так сразу сколько тут тысяч часов только разработки но явно больше 1000 и наверное меньше 10к.
Технологически сделано неплохо. Хотя конечно challenge 1000 кораблей в секторе тут присутствует, открытой карты с перетеканием игроков по карте тоже нет. Но все равно хорошо и достойно.
Но вот такие мелкие казалось бы огрехи низводят все усилия на нет. Игра это прежде всего фан и геймплей. Саркофаг из тяделого металла лития больно бьет по часам потраченным разработчиками. Ну че уже озвучили школота и так схавает.
На мой взгляд один из компонентов успеха игр Blizzard — внимание к деталям.
Не так уж и сложно было ПМ-у на стадии разработки до озвучки почитать сценарий — там я думаю всего -то страниц 100 не больше и проверить на констентность. Игра не про эльфов. а как бы с претензией на НФ — ну потратьте пару дней на валидацию.
Грудь у девушки вышла вполне зачетная, а на background check времени пожалели. Платежеспособная аудитория придирчива и может знать атомный номер лития наизусть
Признаться, я интересуюсь ракетной техникой и, в частности, гибридными двигателя. Ну и там всякие хитрые смеси иногда проскакивают, типа бора с фтором или все того же лития. И, к своему стыду, атомный номер лития я не помню :(. Помню только, что одновалентный. Но, конечно вы правы — это наша ошибка. Слишком много внимания было уделено технической строне и графике, а вот некоторые огрехи в сюжете есть.
Я в свое время перестал покупать журнал Машины и Механизмы из за вот таких мелочей, у них авторы тоже видимо филологи писавшие об атомной энергетике, из за чего журнал из научно популярного для меня становился юмористическим.

Литий даже в воде не тонет, хотя проверять я бы не советовал…
Если бросить литий в воду, то он просто бегает по воде, ничего страшного не происходит. Правда, мы маленькие кусочки бросали.
Мы бросали диаметром миллиметров 5 кусочки, в масле и ждали когда вода доберется, когда она добиралась реакция была очень бурная :)
Хотя учитывая, что прошло больше 25 лет, могу предположить, что это был не литий, а натрий :)
Точно могу сказать, что он плавал и достаточно бурно реагировал с водой, но без взрыва :)
Сюжет пишут филологи. Потому что они действительно умеют писать.


Вы извините, но как раз сюжет, диалоги, персонажи, тексты в этом проекте могут оказаться самым слабым звеном. Запустил, поиграл первые пару миссий… Ну такааая скукотища, такой набор штампов и банальностей. Ни капли оригинальности, все безлико, вторично, как будто специально пытались собрать все общие места из книг, фильмов, игр «про космос».

Сорри, если критика очень уж жесткая получилась. Я прежде всего как потенциальный игрок говорю. Я бы с удовольствием сыграл бы в браузере в РПГ на космическую тематику. Фентези приелась уже как-то. Но «Призраки» не зацепили. Хотя проект, сразу видно, добротный, не на коленке делается. И визуально приятный. Хотя и внешне персонажи тоже без изюминки, очень уж шаблонные — бравый красавчик-капитан, сисястая блондинка-помощница, суровый шеф…
С каких пор Литий — тяжелый метал?
А те, кому не нравится таскать тяжелый металл люминий литий будет таскать лёгкий металл чугуний (с)
Там и в коде работают за еду. ISpaceSystemNotifyReciver.
(facepalm)
Ну и чего минусуем в карму? Обиженки, которым все равно, Reciver или Receiver?

Так дьявол кроется в мелочах. Как говорил мой преподаватель, отправляя переоформлять лабораторную по оптике на физфаке после единственной помарки-исправления: «какой из вас будет ученый с такой небрежностью? чего вы там наизмеряете, если не в состоянии две страницы написать без поправок?».
То есть, как минимум, все эти люди — в его глазах полное ничтожество? www.adme.ru/svoboda-psihologiya/17-izvestnyh-lyudej-i-ih-pocherk-612055

И до кучи, Эйнштейн также не пройдет — www.metronews.ru/novosti/k-100-letie-teorii-otnositel-nosti-razrabotchiki-sozdali-shrift-ejnshtejna/Tpooeo---1DzEchaajDGts
Как, если не секрет, сделан собственно сервер, concurrency model? User-space threads, event-callback, OS threads-kqueue? Сами писали c чистого листа или готовый приспособили?
Не секрет. Это будет описано в следующей части статьи
Спасибо, класно. С нетерпением жду продолжения!
Обожаю статьи о практическом опыте разработки приложений. Спасибо и с нетерпением жду продолжения! Особенно интересно было бы почитать про архитектуру серверной части (имеется ввиду БД, кэширование, репликация, фейловеры, монитроинг, где хоститесь — вот это все) и как вы делали такой крутой UI. Здесь и тут для примера список вопросов, ответы на которые было бы особенно интересно получить :)
Вы open source? Было бы интересно посмотреть на реализацию, читая описание.

Офтопик: Как переключиться на английский, подскажите пожалуйста?
Нет, не open source. Английского пока нет — локализация в процессе.
Спасибо за серию статей, очень интересно почитать чужой опыт. Скажите, пожалуйста, как происходит обработка любого действия, оно проходит подтверждение через сервер? Лежит ли какая-то логика на клиенте? Я имею ввиду например выстрел по врагу (каюсь, не смотрел рабочую версию вашей игры, может там и нет в точности такого кейса, но, думаю, суть вы поймете). Верно ли я понимаю порядок действий:

  • 1) Игрок А скомандовал стрелять по игроку Б
  • 2) На сервер ушла информацию о намерениях игрока А
  • 3) Сервер проверил, соблюдены ли все условия (возможен ли выстрел по игроку Б) и вернул результат
  • 4) Клиент получил одобрение, пошла анимация выстрела
  • 5) В этом пункте я сомневаюсь, что должно происходить: а) снаряд\патрон долетел до игрока Б, сообщаем об этом серверу и он возвращает результат бомбардировки; б) на сервер пошла информация о том, что выстрел совершился и сервер заранее (до того, как анимация завершится) возвращает результат выстрела


Поправьте, пожалуйста, где я не прав, если можно с небольшими комментариями. Насколько задержки в общении такого плана влияют на отображение присходящего на экране?
Все проверки делаются на сервере, часть из них (для удобства пользователя) дублируется на клиенте.
Конкретно к вашему вопросу порядок такой
1. Игрок А скомандовал стрелять по игроку Б
2. На сервер ушла информацию о намерениях игрока А
3. Сервер проверил, можно ли атаковать эту цель, если да, то созда Action TFollowShipAction, который будет пытаться подлететь на близкое расстояние к цели, но при этом не «врезаться» в ней. А так же выставил в TSpaceShip::Enemy корабль Б
4. На сервере, в каждом TSpaceShip::Update проверяется, если есть Enemy и есть турели, которые могут в него стрелять (позволяет расстояние, закончен кул-даун и т.д.), то производится выстрел.
5. Данные о произведенном выстреле отправляются на клиенты, чтобы он мог создать particle выстрела из лазера и отобразить урон.
Выстрел из лазера (турель) долетает до противника мгновенно.

Отдельно ведется огонь из спец.оружия (абилки). Там порядок такой
1. Игрок жмет на кнопку «выстрел абилкой», пакет уходит на сервер
2. Сервер проверяет, можно ли произвести выстрел абилкой. При этом не все типы абилки требуют наличие TSpaceShip::Enemy
3. Если стрелять можно, то сервер производит выстрел. Выстрел может быть двух типов — с созданием объекта (ракеты, плазма, мины, дроны), которые как-то перемещаются и наносят урон, только настигнув цель — или мгновенный урон (призмалуч).
4. В случае мгновенного урона данные об уроне отправляются на клиенты, чтобы они могли отобразить particle выстрела и урон
5. В случае создание объекта, этот объект выполняет свою полетную программу, на клиенты уходит пакет о добавлении объекта и данные о его полетных командах. Если объект наносит урон, то так же отправляется пакет на клиенты с типом урона, чтобы клиенты могли отобразить необходимый particle и цифры урона.

По задержкам. С пингом до 100мс играть можно без проблем. При большем пинге возникает проблема не с самимы выстрелами, а с тем, что ориентация корабля в космосе не соответствует тому, что расчитано на сервере. А для некоторых абилок это критично, т.к. у них есть угол поражения.
Спасибо за подробный ответ. Правильно ли я понимаю, если у меня слабое интернет соединение, то вероятнее всего я нажму на выстрел, но сам выстрел (анимация и результат) произойдет только тогда, когда сервер даст добро? В целом все логично, но… мне не дает покоя эта задержка :) Ее можно как-то миновать или в этом нету смысла? К примеру в играх, где выстрелы должны происходить моментально (шутеры).

Вы так же упомянули об ориентации, которая может не соответстовать рассчетам с сервера. Каждое движение так же согласуется с сервером? Если я беспорядочно буду кликать по области, как это обрабатывает сервер?
Все-таки вам стоит посмотреть на игру, тогда часть вопросов отпадет :).
Есть два типа оружия на борту: один полностью управляет сервер, главное сказать кого мочить и подлететь на дистанцию выстрела. И второй тип: им полностью управляет пользователь. И сервер попробует произвести быстрел абилкой как только к нему прийдет пакет на выстрел.

Теперь про шутеры: вы в CS пробовали играть на плохом инете? Или в Старик? Попробуйте, сразу поймете насколько сильно они привязаны ко времени пинга. На нормальных серверах игроков с плохим пингом просто кикают, чтобы играть не мешали. С плохим пингом вы нормально ни в одну игру реального времени по инету играть не сможете.

Теперь про ориентацию. Сервер передает коэффициенты уравнения движения на клиент. И клиент уже строит ф-цию движения по ним. Но если произошла задержка в передаче (и, скажем, составила 500мс или больше), то будет небольшая рассинхронизация, т.к. за это время сервер уже новую команду на движение дал, а клиент ещё это не отобразил.
Постараюсь глянуть на досуге. Спасибо.

И еще хочу спросить) Вы писали, что выбрали mysql в качестве бд. Отсюда два вопроса: как часто сервер сбрасывает игровые данные в бд (каждый ход?)? И не боитесь, что mysql в какой-то момент начнет сдавать в производительности?
У нас нет такого понятия, как «ход» — игра в реальном времени.
О работе с БД я напишу в следующей статье ).
Простите, за ход я имел ввиду действие: перемещение с одной точки на другую, выстрел, достать\положить на склад и пр.

Буду ждать статью про БД, спасибо еще раз
Поиграл, понравилось!
Есть, конечно, недочеты на мой взгляд, например:
— бесполезный чат, который занимает значительное место и никак не скрывается (кроме переключения вкладки на приват);
— навыки почему-то в инвентаре, я иногда путаюсь где их искать;
— прокачка на лоу-левелах что-то очень медленно движется;
— способов для заработка денег на обслуживание оборудования как-то маловато, в КР можно было легко заработать на спекуляции.

До «Космических рейджеров» еще далеко, но начало хорошее.

А еще я узнал, что у моего Macbook Air все-таки есть вентилятор, он начинает жутко шуметь! Отсюда вопрос, можно ли сделать меньше графики для меньшей нагрузки?
Sign up to leave a comment.