Суть в том, что существует постоянный сервер вселенной, который мы называем галактический Сервер, который обслуживает все активы игрока, отношения групп и локации внутри вселенной SC. Так как Галактический Сервер не обслуживает никаких действий в реальном времени (realtime action), он может заниматься обработкой всей базы игроков, которая на данный момент может содержать около 45000 игроков, он разработан так, что способен масштабироваться до миллиона в случае необходимости. Другая фишка Галактического Сервера, что он динамично распределяет игроков в зависимости от их умений, мировоззрения (aligment) и настроек предпочтения PvP по боевым инстам. Боевой инст можно рассматривать как многопользовательские сессии Battlefield 3 или битвы в WoT, с существенным отличием что подбор игроков происходит прозрачно и "в тему" (in fiction).
Можно привести такой пример - Я начинаю на планете New Pitsburg. Я решил прикупить пару тонн стлали и отвезти ее на верфь Терры. Я нахожусь в руках Галактического Сервера, который общается с моим клиентом и осуществляет мои покупки и взаимодействия на планете, так как это не real time действия на манер битв в космосе. Мы представляем это на подобие Фрилансера, в 3D обстановке, локация с видом от третьего лица, мы взаимодействуем с NPC либо с терминалом, чтобы купить/продать, произвести апгрейд корабля, послушать слухи, узнать о миссиях и т.д. Вы также сможете общаться с игроками посредством чата. Мы еще не до конца проработали поддержку аватаров, но в игре будут бары или частные клубы, где вы сможете встретиться/общаться с другими игроками. Помимо наполнения баров NPC, в бары будут заходить и другие игроки.
Если зайдет большее количество игроков, чем у вас панель аватаров (slots of avatars in the bar), для вас будут отображены игроки имеющие какое-либо отношение к вам, например, игроки ищущие напарника, игроки из вашей группы или возможно кто-то, на кого вы взяли миссию. Возможно, это будет ниспадающий список, но я ненавижу все, что ломает атмосферу игры, скорее всего мы реализуем это каким-нибудь отыгрышом, возможно, вы говорите бармену, кого вы ищете или смотрите гостевой список.
Купив груз, я направляюсь в космос. Если на орбите уже присутствуют игроки, инст орбиты уже будет создан. Если он еще не полон, я попаду в него. Если мест в нем уже не будет, то создастся еще один инст орбиты. Все орбитальные (и боевые) инсты будут иметь зарезервированные места для друзей и Важных персонажей (persons of interest (POI)), которыми могут быть как игроки так и NPC, так что если существует несколько инстов орбит вы попадете в ту, где уже присутствуют ваши друзья. Это также будет работать если вы хотите проследовать за каким-либо персонажем - вы "помечаете" его как POI и дальше игра сделает все, чтобы вы попали в один инст к нему. Например, если вы пометили кого-либо на планете и затем запустили свой PDA, он уведомит вас, что этот POI отбывает с планеты, показав вам окошко о запуске в космос и для вас.
На орбите я могу запустить Навигационный компьютер и задать пункт назначения. Если пункт назначения в нескольких прыжках, навигационный компьютер проложит курс по соответствующим прыжковым точкам (jump point). Вы сможете корректировать ваш курс как в Google maps, так что если вы выберите другой джамп поинт на звездной карте, маршрут пересчитается и выбранный джамп поинт будет первым в списке.
Проложив маршрут, я включаю автопилот и направляюсь к первой точке своего путешествия (джамп поинту, промежуточной космической локации (например, пояс астероидов) и т.д.). В этот момент управление берет Галактический Сервер, который рассчитывает буду ли перехвачен врагом, либо встречу того, кто отметил меня как POI, либо попаду на какую-то предопределенную локацию. Такие встречи могут быть как с NPC, так и с игроками и выбираются по уровню навыка и, что важно для всех тех кто хочет больше играть в одиночку и не хочет связываться с гриферами (griefers), будет основываться на ваших настройках PvP. Так что если вы выбрали для себя низкий уровень PvP и вы в относительно безопасной зоне, вам скорее попадется NPC - PvE встреча, вместо PvP. Конечно, в таком случае ваш ранг и заработанная репутация будет другой, нежели после PvP встречи.
Я надеюсь, что такая система позволит новичкам чувствовать себя более безопасно в открытом мире, но как только они почувствуют себя увереннее и захотят испытать свои силы с живыми соперниками, они смогут вступить в битвы PvP. Во вселенной будут места, где не будут учитываться выставленные настройки PvP, там PvP будет присутствовать в любом случае. Это будут системы на окраинах охраняемой галактики и будут славиться пиратством и нелегальной деятельностью. А еще они будут гораздо прибыльнее - в том случае, если вы сможете там выжить.
Теперь, если вы летите с друзьями, которых вы "пометили" с помощью системы POI, они будут втянуты в боевой инст, неважно против кого - NPC, людей, либо и тех, и тех.
Как только Галактический Сервер рассчитает, что вам предстоит столкновение с учетом выше перечисленных критериев, он создаст боевой инст, либо поместит вас в уже существующий, если в нем будет место для новых игроков. Чтобы покинуть данный инст вам необходимо избавиться от врагов, либо уничтожением, либо договорившись, либо просто сбежав. Попав в инст, вы можете подать сигнал бедствия, чтобы позвать своих друзей. Есть два способа, которыми ваши друзья могут вам помочь. Мы резервируем места в инсте для ваших друзей, чтобы они могли вступить в бой. Что бы сделать это, они должны быть в той же системе.
Если да, то они должны включить авто пилот, который приведет их вам на помощь в инст. Если они в другой системе, они могут попытаться прилететь в вашу систему до того, как битва закончится и войти в бой первым способом. Второй способ, которым ваши друзья смогут помочь - это "войти" в ваш корабль. Это будет работать только если в вашем корабле предусмотрен экипаж, например, RSI Constellation. В таком случае им нет необходимости быть в одной с вами системе, они просто появятся на вашем корабле и смогут передвигаться в нем от первого лица, смогут занимать места в туррелях или сесть в P52 и вступить в битву на нем пока вы пилотируете основной корабль (либо они могут взять управление корабля, а вы будете управлять истребителем).
Как только минует опасность либо произойдет событие (иногда вам будут встречаться инсты, в которых будут присутствовать покинутые корабли или космические станции, и мы хотим дать игроку исследовать их) вы сможете опять включить автопилот, вас подхватит Галактический Сервер и вы продолжите путь по проложенному маршруту.
Вас будет выкидывать либо к джамп поинтам, либо планетам, где вы можете решить уйти ли в другую систему либо приземлиться.
Этот процесс будет повторяться до тех пор, пока вы не достигнете пункта назначения, в нашем примере Terra, где я смогу использовать свою систему коммуникаций, чтобы запросить место посадки, которая спустит меня на поверхность планеты, проиграв ролик на движке игры. На земле я смогу продать свой груз, восполнить запасы и поискать новые возможности перемещаясь по планете с видом от третьего лица.
Преимущество данной системы в том, что вы сами подгоняете игру под свой стиль игры - соло, кооператив или PvP. Такая система не помещает вас в другую, параллельную версию вселенной SC, так как все живут на одном сервере. В связи с тем, что все инсты орбит/битв временные, вы никогда не застрянете с одной группой игроков на длительное время и особое внимание уделено взаимодействию с друзьями и кооперативу, так что всегда будет место для друзей в ваших приключениях; неважно против игроков или NPC.
Та же система инстов будет присутствовать в одиночном режиме 42й Эскдрильи (Squadron 42). Если вы играете оффлайн, ваш компьютер будет работать в режиме клиент-сервер, для ваших друзей не будет возможности подключиться и все персонажи будут NPC. Но если вы решите играть в 42-ю Эскадрилью на Галактическом Сервере, даже на предопределенных миссиях и космических локациях (вы не выбираете куда лететь, вы ведь военный) мы позволим вашим друзьям занимать место NPC ведомых, а если вы захотите получить высокий ранг, вы можете позволить другим игрокам играть против вас, заняв места вражеских персонажей. Эта система похожа на Demon’s Souls, где люди могли подключаться как Blue Phantom, чтобы помочь вам убить босса или сражаться против нападающих игроков, либо вы могли войти как Black Phantom в чей-то мир и попытаться убить его за опыт и награды.
Мы уже больше года сотрудничаем с Amazon, поскольку мы искали лидера по технологиям, который мог бы стать долгосрочным партнером Star Citizen и Squadron 42. Lumberyard предоставляет революционные технические решения для онлайновых игр, включая глубокую интеграцию с облачным бэкендом Amazon Web Services и социальными компонентами Twitch, которые позволят нам быстро и мгновенно соединиться с миллионами игроков по всему миру.
Робертс заявил, что переход на Lumberyard был очень плавным и легким:
Более того, мне приятно заявить, что релиз 2.6 Alpha для Star Citizen идет на Lumberyard и AWS.
Что делается для того, чтобы увеличить количество людей на серверах? Можно ли ожидать в ближайшем будущем, увеличение игроков в инстансах с 24-х до 32-х?
Мы упорно трудимся и оптимизируем зоны, пока что, главной проблемой остаются корабли, т.к. они являются очень сложными и забирают много ресурсов, нужно чтобы они «переговаривались» по сети между собой. Так что корабль, это не одна сущность, а 50-60, а в случае больших кораблей – это гораздо больше 60-ти.
Поэтому корабли очень сильно нагружают сетевой трафик, в плане симуляции и обработки. В целом, это и является главным ограничивающим фактором, который нам мешает. Также мы переделываем очень много вещей, в т.ч. сетевой LOD, чтобы вам показывались не все предметы сразу, а то, как далеко они, что они делают, другой ли это игрок и нужно ли это вам.
Надеюсь, всё это поможет разгрузить сервера, мы всё больше задействуем все ядра процессора и мультитрединг (multi-threading), это поможет обработать больше физических действий в одно и тоже время, получить больше обновлений сущностей во время симуляции. В результате этого, мы сможем запустить больше игроков в Крусейдер, и, в дальнейшем, добавлять всё больше игроков на серверы.
Мы работаем над запасным серверной технологией мешей, которая позволит нам мешировать больше игроков, в целом, это позволит нам добавлять больше игроков в один инстанс. Но это пока технология будущего, в ближайшее время это имплементировано не будет.
Вы утверждали, что все части вселенной игры, будут инстансироваться с максимальным количеством игроков в каждом инстансе, и множество инстансов одного и того же места космоса, будут генерироваться в одно и тоже время. Как это будет работать с людьми, которые хотят, чтобы они и их друзья, всегда были в одном и том же инстансе, чтобы работать как одна команда?
Сейчас, если вы играете в Крусейдер 2.2, то на одном игровом сервере, в одном инстансе, может быть максимум 24-ре игрока. Сейчас у нас тридцать два сервера-ядра, которые работают в игре, и восемь игровых инстансов, использует четыре сервера-ядра. Но у нас другая цель: чтобы не было никаких восемь или четыре. Пусть один игровой сервер использует 32-х ядерную машину. Теперь, если у нас будет восемь игроков, и вы умножайте 8 на 24, у вас получается гораздо большее число игроков, более 200-т – и все они будут находится на одном игровом сервере! Мы постоянно проводим оптимизации и движемся вперед.
Теперь же, что касается клиентской стороны. Хотя сервер, возможно, и справится со множеством сущностей, т.к. ему не надо будет их прорисовывать, ему не придется тратить всю память на них. Ему лишь нужно будет справится с фоновой симуляцией и обновлением. Клиенты возможно не догадываются, но всю информацию о прорисовке и обновлениям, они получают с сервера. Затем мы хотим сделать бесшовные переходы от сервера к серверу и объединять серверы в меши. Так что, вместо «Я в системе Стэнтон и нахожусь на первом сервере, теперь, на втором, теперь – на третьем.» Вместо этого будет система бесшовного перехода с сервера на сервер, как только на одном заполняется лимит на игроков, к примеру, 50 игроков.
Т.е. летает 30, 40, игроков, и как только становится больше 50-ти игроков, они плавно переводятся на другой сервер, все это происходит в фоновом режиме, бесшовно и безболезненно. Оба сервера будут иметь полный обзор звёздной системы и постоянно общаться между собой.
Сервер отвечающий за симуляцию сущностей, будет немного отличаться. Он будет «говорить» другим серверам, что происходит с сущностями, где они находятся и что с ними происходит в данный момент. Серверы смогут быстро обмениваться сущностями, находящимися у них в памяти, поэтому мы и хотим объединить серверы в меши, таким образом, мы сможем объединять сотни, если не тысячи игроков в одном инстансе.
Но всё упирается в клиента, и что клиент может рендерить и видеть на своей стороне. Мы не будем добавлять инстансы друг поверх друга, вы просто будете видеть определенное количество игроков 30-40-50. Вы спросите, как быть на посадочных зонах, где может крутится, гулять и разговаривать несколько сотен или даже тысяч игроков. Но мы не будем прорисовывать всю тысячу на клиентской стороне. Возможно, мы сделаем агрессивный LOD, который просто будет отрезать определенное количество игроков. Как только они будут оказываться в вашем поле зрения, они будут прорисовываться, а другие наоборот – исчезать.
Теперь, что касается вашего вопроса. Мы знаем, кто является вашими друзьями, которые вы пометили как интересные персоны или с кем вы постоянно играете и т.д. Мы сделаем такой алгоритм, который в инстанс с вами, будет добавлять только ваших друзей, знакомых и т.д., и отсеивать случайных людей. Единственное, что будет невозможно сделать, так это вместе полетать одной, огромной организацией, если в ней будет несколько тысяч человек. Это будет просто невозможно. Но несколько сотен – вполне реально.
Но не думайте, что всё, что я описал, будет в ближайшем будущем – это вопрос далекого будущего, ближе к релизу игры. Сейчас мы закладываем только основы игры, на которых и будет базироваться всё остальное. Но то, что я сказал – обязательно будет в игре.
Помимо торговцев в магазинах, квестодателей, и других NPC, которые считаются важными в других играх, будут ли NPC в ЗГ, в отдельно взятой зоне, генерироваться случайно, базируясь на текущем окружении и параметрах, установленных в этой зоне?
ОТВЕТ: У нас будет симуляция вселенной на отдельном сервере. Это, как бы, общая картина симуляции. Что-то вроде Цивилизации или что-то типа того. Как бы, медленная, пошаговая стратегия. Это и будет симуляцией вселенной, в макробъеме. Кто с кем торгует? Кто что производит? Какие товары здесь требуются? Где будет атака пиратов? Все основные результаты действий, случающиеся во вселенной и то, как они на неё влияют. Затем, это всё передаётся на локальные игровые серверы, к которым прикреплены все вы, парни, (ну, т.е. игроки). Каждый момент, происходящий на сервер вселенной, переносится на игровой сервер.
Вот что случится, если вы, к примеру, захотите сесть на планету. Игра скажет: «Окей, на этой планете добывают руду, поэтому я сгенерирую население следующим образом: NPC будет Х, 60% которых будут шахтерами, потом, у нас будут органы правопорядка, обслуживающий персонал в барах, и т.п. Вся информация, для наполнения планеты NPC, будет браться с сервера вселенной, динамически изменяясь.
Если это место изменится, например, наступят трудные времена или начнется безработица, или же люди начнут уезжать на другие планеты, уровень населения снизится, и вы увидите меньше людей на посадочной площадке. Возможно, закроется шахта и вы больше не увидите шахтеров. Из-за этого, возможно, повысится уровень преступности и люди пойдут в криминал.
Т.е. будет тесная связь, между симуляцией вселенной и тем, что вы увидите, передвигаясь по миру игры. Во вселенной всё будет изменяться. Но, конечно, игроки тоже будут оказывать влияние на вселенную. Все действия мета ИИ будут управляться с сервера, затем, действия игрока будут симулироваться в местном игровом инстансе. К примеру, вы, парни, заходите в Крусейдер, информация о вас будет посылаться на сервер вселенной, и уже исходят из этого, будут генерироваться события, типа пиратов и т.п.
Если пираты охотятся на груз, который перевозят между двумя планетами, к примеру, эти пираты управляются ИИ, то компания, не получит товаров, т.к. пираты будут уничтожать грузоперевозки. Тогда компания нанимает охотников за головами (вас, игроков), чтобы вы полетели в эту зону и уничтожили пиратов. Вы летите туда и убиваете там пиратов, к примеру, их там 20 человек, вся эта информация отправляется обратно на сервер вселенной, и пираты больше не будут спавнится, в этом секторе космоса т.к. вы уничтожили их всех в этой зоне.
Т.е. будет постоянный обмен информацией между местными игровыми серверами\инстансами и сервером вселенной.
Мы закадрово работаем над тем, чтобы было больше игроков в одном инстансе, и чтобы игроки могли бесшовно переходить между инстансами – как я уже говорил в предыдущей 10-ке Председателя, у нас будет меш сервера в облаке, которые будут работать с одним, продолжительным пространством, к примеру, звёздной системой Стэнтон, где расположен Крусейдер, а разные сервера будут управлять определенными группами игроков, и если кто-то, к примеру, путешествует из Порт Олисар в Порт Кареа, а у нас лимит на один сервер, например, 24-ре игрока, то тогда другие сервера будут «присматривать» за зоной вокруг Порта Олисар, а другие сервера – за зоной вокруг Порта Кореа, и еще один сервер за зоной вокруг Ковалекс, и если вы приземлитесь в зону этого сервера, он немедленно сообщит другим серверам, ваше местоположение, и в каком вы состоянии.
Так что у каждого сервера будут сведения о состоянии всех сущностей и всех игроков в системе, но сервера будут симулировать только те, за которые они будут ответственны. И эта техника позволит увеличить количество игроков на одном сервере, также это улучшит сам код на сервере, и как мы будем использовать много ядер, т.к. я уже раньше говорил, что сейчас мы используем 8 отдельных игровых серверов, на одном физическом сервере, находящемся в облаке.
У физического сервера – 32 логических ядра, это приблизительно равно 16 настоящим физическим ядрам ЦП, и каждый из наших игровых серверов – DGS инстансов – использует 4 логических ядра, что равно двум физическим, поэтому если вы решили, что мы не запустим 8 инстансов на этом физическом сервере, а мы наоборот запустим инстанс, и это будет 8*24 – неплохая сумма, не правда ли? Почти 200 игроков, это без оптимизации, пересчета, лучшей производительности и т.п.
Сейчас мы работаем над этим, но иногда приходится идти на компромисс, вы это видели, когда мы выпустили 2.2 и 2.3, иногда производительность сильно падала, иногда вырастала, и одной из проблем является то, что мы добавляем новые детали в игру, и мы не поймем, как они воздействует, пока не будет полной нагрузки на PTU или Лайв. Поскольку мы не можем понять, даже с внутренними тестами, 30-ю разными тестерами, нам не хватает информации, даже когда тысячи игроков играют в PTU, или даже сотни тысяч, когда выходит Лайв.
Так что мы постоянно работаем над этим. Сейчас мы заняты оптимизацией кода, но вообще-то мы находимся в середине обратной переписки кода – это должно полностью изменить то, как работает сериализация, она будет более логической и эффективной. Фундаментальной частью нашей новой работы являются порты для предметов – система предметов в 2.0, о которой мы говорили раньше. Её мы полностью изменяем, реструктурируя то, как устроены сущности – мы полностью изменяем их устройство в CryEngine, чтобы эта система была очень компонентной, более логической, и мы сериализируем только те данные, которые нам действительно нужны, а не огромные пузыри данных, как раньше. Поскольку старая система была сделана для маленьких многопользовательских игр – от 8 до 16 игроков – дезматч, FPS-стиль, тогда как нам нужно было сделать систему, которая бы поддерживала очень большое количество игроков, в течении очень долгих сессий, возможно даже несколько сотен человек.
Это как наш переход с 32-х бит на 64-ре бита – этот переход позволил нам создать такие большие карты, как Крусейдер, локальную физическую сетку, и еще очень много, чего вы могли увидеть уже с 2.0. Так же это дало нам прирост фреймрейта на сервере – это и является одной из причин, почему у многих людей сейчас происходит рассинхрон, или проблемы с прицеливанием, т.к. когда настоящий сервер находится под сильной нагрузкой, он начинается работать с сильным проседанием фреймрейта, даже хуже чем у клиентов.
Клиент может работать с 40-50 фреймов, а сервер работает на 10-15 фреймов. Поэтому сервер, работающий на 10-15 фреймов, и физику будет симулировать только на 10-15 фреймов, поэтому и возникает такой сильный рассинхрон, в особенности при EVA.
Частично это происходило из-за того, что сервер на физическом уровне, работал с гораздо более медленным фреймрейтом, чем клиент, поэтому мы сейчас и стараемся решить эту проблему, работа идет полным ходом. Как только мы её доделаем, все будет работать плавно, игроков в одном инстансе станет гораздо больше. Сейчас у нас 4 инженера работают над сетевой стороной игровых серверов и 3 инженера работают над обратной стороной сетевых служб. Если вы сами хороший сетевой инженер, или знаете кого-то – обращайтесь к нам, нам всегда требуются опытные и талантливые люди. Мы всегда ищем знающих людей, но как вы сами знаете, очень трудно найти хороших сетевиков, в особенности, кто хорошо разбирается и в облачных, и в сетевых, и в серверных технологиях.
КрайНетворк (Ежемесячный отчёт: Июнь 2016), как мы и подозревали, потребовал огромных изменений, чтобы потянуть игру такого размаха, и недавний релиз 2.4.0 лишь в очередной раз это доказал. КрайНетворк начал реально трещать под теми задачи, которые мы ему начали ставить.
Теперь мы, закусив удила, воплощаем новую систему, созданную на бумаге, в коде. Одна из таких технологий - Глобальные Сериализированные Переменные, упрощает программистам геймплея жизнь в этой среде, и так же поможет оптимизировать пропускную способность. Программисту теперь достаточно будет отметить какая переменная будет реплицировать между клиентом и сервером, а подлежащая система сама будет определять, что изменилось с прошлой передачи, а что нет, и примет эффективное решение. Без передачи целых блоков при изменении одного бита, разночтений вызванных непостоянством сетевых задержек и т.д.
Так же мы имели проблемы с базовой системой очереди сообщений. Несмотря на то, что она надёжно отправляла пакеты, они не всегда шли в правильном порядке, и всё кончалось тонной кода, который распутывал это. Проблемы, которые при этом возникали, было нереально отследить и починить из-за их случайной природы. Мы полностью переписали эту очередь, и она будет лучше справляться с порядком и передачей пакетов. Это значит, что мы сможем делать более точные предположения и чистить код. Например, если вы получили сообщение о том, что игрок должен возродиться, то вы знаете что сообщение, которое его убило в первую очередь, уже прибыло и обработано.
Теперь что касается пропускной способности, необходимой для игры, как вы планируете делать сетевой код для ЗГ? Он будет прямым или более сложным? К примеру, раньше, в Unreal Tournament 99, 90Кб аплоада хватало для 32-х игроков. Теперь же, в играх типа ARK, с той же пропускной способностью, вы сможете держать максимум 8-10 игроков. ММО начинали на линиях с 56к скоростью, потом начал требоваться SDL или более быстрое соединение. Как вы думаете, что ждет ЗГ в этом плане?
Мы хотим сделать сетевой код в ЗГ, доступных для всех. Если честно, самой большой проблемой, сейчас является не пропускная способность, и не то, сколько мы спускаем данных «вверх» или «вниз», просто если в одной солнечной системе, очень много людей летает и летает ещё куча NPC, то тогда возникает один большой затык.
Хотя мы уже сделали определенные изменения. Например, систему Dead Reckoning, которая не посылает данные от вас, пока вы не совершите какие-нибудь действия. Например, если что-нибудь движется с постоянной скоростью, и в одном направлении, как только вы установили скорость и направление, вам больше не нужно отсылать данные, пока что-то не измениться. Ваша скорость, ускорение и направление уже высчитаны, если что-то измениться кардинально, тогда ваши данные будут изменены и отосланы.
Сейчас мы переделываем пропускную способность и настраиваем её. К сожалению, это проблема не только CryEngine, но и любого движка, типа Unity или Unreal – ведь они не предназначены для масштабирования сотен тысяч и миллионов игроков. Эти движки затачиваются под 16-32 игрока в матче. А нам нужно кардинально другое от движка, в Звездном Гражданине.
Поэтому мы перерабатываем всю систему, чтобы она лучше работала, создаем систему сетевых сообщений (network communication messages), которая уже частично работает в Cry Engine. Всё дело не в пропускной способности, а в мощности ЦП, которому нужно время симулировать и обновлять объекты и GPU, чтобы отрендеривать их.
Когда люди играют в 2.0 или 2.1, и, если все спавнятся одновременно в игре в одном месте, производительность будет лучше, чем в 6 разных зон с 6-ю разными ИИ, т.к. серверу нужно будет просчитывать каждого игрока, и каждый ИИ, в разных зонах. И это очень нагружает сервер, фреймрейт падает до 10, вместо задуманных 30-ти, посылается меньше сообщений клиенту, и клиент думает, что тормозит игра, т.к. не хватает обновлений или возникает эффект раббербандинга.
Поэтому, чтобы сделать обновления более эффективными, определенно, придется сделать рендеринг лучше, посылать только необходимую информацию сетевым кодом, также нужно смотреть за правильной синхронизацией всего этого. Так что сейчас, затык не в пропускной способности, а в производительности сервера и клиента.
Мы сфокусированы на этой проблеме, мы будем оптимизировать пакеты данных, которые мы посылаем по сети, возможно, мы сделаем их меньше. Не беспокойтесь, над этой проблемой работает множество блестящих умов.
Благодаря «облачным технологиям» серверы альфа-версии будет доступны по всему миру, что должно положительно сказаться на задержке. Такой подход заметно отличается от классической модели ММО-игр, где серверы установлены в двух-трёх дата-центрах на весь мир.
Переходя к тому, о чем мы и так знали долгое время, потребуются массивные улучшения в CryNetwork [сетевой код движка CryENGINE – прим. пер.] для проекта такого масштаба, и выход 2.4.0. действительно подтвердил это. CryNetwork реально начинал скрипеть от тех требований, которые мы к нему предъявляли. Мы с нетерпением ждем того, чтобы начать вкладываться в разработку новой технологии, которую мы придумали на бумаге, и воплощать ее в коде. Одна из таких технологий – Глобальные Упорядоченные Переменные, которые созданы для того, чтобы облегчить жизнь программистам геймплея и помочь в оптимизации пропускной способности сети. Ранее, когда мы использовали «аспекты», программисту приходилось решать, какую информацию следует отправить по сети, а затем также разбираться с записью этой информации на одном конце и ее чтением на другом. Это всегда приводило к ошибкам в передаче из-за особенности сетевых задержек, на которые, к сожалению, зачастую нет возможности повлиять. Если вы не получаете, считываете и анализируете данные точно в такой же манере, как и записали, вы закончите потерей соединения, что может оказаться более кропотливым занятием, чем вы себе представляете. Также было крайне неудобно, что при изменении хоть одного бита, следовало отправлять целый блок информации. Упорядоченные переменные позволяют программисту просто отметить переменные, которые он хочет дублировать на сервер/клиент, а затем упомянутая система может просто определить, какие из них изменились с последней отправки, а какие нет, и затем позаботится об остальном быстро и эффективно.
Мы также испытывали проблемы с очередью базовых сообщений, которая, хотя и посылает пакеты надежно, может нарушить их порядок, так что вы окажетесь с кучей перемешанного кода и вам придется его разгребать. Ошибки, вызванные этим, очень сложно отследить и исправить, особенно в условиях сиюминутных требований многопользовательской игры, ибо по природе своей они абсолютно случайны и их исправление обещает быть ужасным и мучительным процессом. Мы полностью переписываем эту очередь сообщений, и она разрабатывается с целью лучшего осуществления упорядочивания и передачи пакетов. Это значит, что мы уже можем сделать определенные предположения, которые помогут нам очистить исходный код, например, если вы получаете сообщение о том, что игрок возродился, вы уверены в том, что сообщение о его смерти было обработано ранее. Если среди вас есть логики, вам должно это понравиться.
Как один общий сервер будет работать с локальными серверами регионов? Если я состою в гильдии из Австралии, а сам располагаюсь в США, как мы сможем летать вместе, так как находимся на разных серверах?
Наша инфраструктура подразумевает один общий сервер, занимающийся глобальными вычислениями, и локальными серверами, которые занимаются инстансами с игроками (полёты в космосе, бои, нахождение на планете и тд.). Последние будут расположены по всему миру, а общий сервер будет выбирать, в какой инстанс на каком сервере поместить игрока по ряду критериев. Например, друзей кидает в один инстанс; когда сервер хочет PvP, сюда же попадают ваши враги, причём соответствующие мастерству игрока. Но это характерно только когда в определённом месте больше игроков, чем помещается в инстанс. В остальных случаях все будут играть вместе, с рядом небольших исключений (игроков, кто не хочет PvP поместят в другой инстанс). Матчмейкинг будет учитывать следующие параметры: пинг, друзья, союзники, потенциально интересные личности, враги, уровень мастерства.
Что касается игры с друзьями из другого региона - придётся терпеть высокий пинг. Будет возможность настроить матчмейкинг, чтобы он позволил игроку попасть в другой регион независимо от задержки.
Самый значительный барьер технического плана на сегодняшний день это сетевые серверные приложения. После попытки работать с родным кодом CryEngine, было принято решение отбросить часть унаследованных технологий. Что означает разработку того, что мы называем Generic Instance Manager (GIM, Обобщенный Менеджер Инстансов), а так же переписывание Матчмейкера, и (для проекта в целом) игрового Лаунчера с чистого листа. Все эти работы продвигаются успешно, но они все требуют дополнительного времени работы наших инженеров.
Углубляясь в подробности технических деталей этих систем, одним из самых больших препятствий было, как отмечалось, создание GIM. Эта новая система будет отвечать за все игровые сервера, составляющие Star Citizen, и мы создали её, что бы иметь в значительной степени более прямой контроль за внутренним состоянием и работой каждого игрового сервера, чем это было возможно ранее. GIM не только управляет инстансами Arena Commander и Star Marine, а так же закладывает прочную основу для подгружаемых мультиплеерных Ангаров, а так же подгружаемых игровых серверов Вселенной, что будет формировать постоянную вселенную. Система GIM размещает и сбрасывает игровые сервера в гораздо более быстром темпе, и более надежным способом чем ранее, помогая доставить игроков в экш гораздо быстрее, и поддерживая нахождение их в игре с меньшим количеством инцидентов. Разработка этой системы, продолжающаяся уже некоторое время, была групповым усилием и привлекла инженеров со всей компании. Когда система будет интегрирована, она не только улучшит работу Star Marine, но так же наметит "закулисный курс" для будущего Star Citizen.
Новая система GIM является не единственной "домашней разработкой", понадобившейся для Star Marine. Второй задачей было переписывание с нуля системы Матчмейкинга, с применением совершенно другого подхода к процессу, который уничтожит длительное ожидание при поиске Матчей. Ситуация, которая обычно приводила к сообщению “Match Not Found” больше не существует и любой игрок / группа гарантированно попадет в матч за гораздо более короткое время, чем это было ранее. Матчмейкер теперь держит друзей вместе, так что любые игроки в публичных (открытых) группах всегда встретятся с такой же командой, как и ожидалось. Я с радостью сообщаю, что по состоянию на эту неделю, новое программное обеспечение матчмейкера интегрировано и проходит тестирование.
Третий процесс над которым мы сейчас работаем для улучшения сетевого кода серверных приложений Star Citizen, это то что мы называем “Phoenix” (Феникс) система динамических сред. Каждый раз когда команда запускает новый билд Star Citizen, все данные, которые нужны серверам, автоматически копируются на жесткие диски Google - это "моментальные снимки" наших игровых данных. Эти диски разбиты на две - три принципиальные части: Базовый Образ/ Base Image (ОС плюс несколько других вещей), Логи / Logs, и Серверные Данные / Server Data (Код и Ассетсы). Когда мы строим среду, мы прикрепляем дубликаты этих дисков для каждой Виртуальной Машины (VM), которую поднимаем. Дубликаты "моментальных снимков" создаются очень быстро, приблизительно 45 секунд для 200 гигабайт данных. Мы написали ряд автоматических кодов для автоматического исполнения команд на VM, для конфигурации их непосредственно в тот тип сервера, которым они станут (Игровой, Матчмейкинг, Группа, и тд). Во время этого процесса новые DNS приписываются серверу, основываясь на версии загруженных данных. Когда новый билд создан и нам надо продвинуть его в среду, мы вызываем команду, которая автоматически выключает все VM, отсоединяет дублированные диски Базового Образа и диски Серверных Данных (диска с Логами всегда сохраняются для устранения проблем), а затем перезапускает сервера с новыми дубликатами на основе "моментальных снимков" и среда запущена и готова на новой версии.
Весь этот процесс занимает около 8 минут. Когда нам надо взять среду QA (отдел качества), которая была создана таким образом, и расширить её, что бы она стала средой PTU, мы отправляем команду в слой Инициализации (Provisioning) и он все уходит на Google, запрашивается больше Виртуальных Машин, строятся дубликаты дисков, прицепляются моментальные снимки, исполняется Шеф команда, что сделать конфигурацию, добавляются DNS, и коннектят в существующую инфраструктуру для использования. Этот же процесс повторяется для создания Production. Каждый раз когда мы расширяем среду, это занимает 8 - 10 минут, в зависимости от типа среды и необходимой конфигурации.
Польза такого динамического создания и расширения среды состоит из трех частей. Во первых, любые изменения конфигов, неправильные настройки, или нарушенные процессы, полностью убираются при пересоздании VM с использованием новых дубликатов дисков. Любые изменения конфигурации, которые должны сохраниться, должны быть сделаны на Шеф уровне. Второе, мы можем быть абсолютно уверены, что среды PTU и Production, это в точности те среды, что тестировал отдел качества и не будет ни каких неизвестных различий, которые мы не смогли отловить во время внутреннего тестирования. И третье - скорость. Гораздо быстрей динамически восстановить среды на лету, чем многократно копировать данные каждый раз. Крайние две части имеют достаточно большое значение. Если мы чему и научились, так это важности наличия непрерывной тестовой среды, которую можно быстро развернуть, и эта новая система достаточно быстрая. Это значительный фактор увеличения наших способностей быстро итерировать тестовые версии, а значит QA и, в конечном итоге, наши бэкеры, смогут выполнять более разнообразные тесты быстрее. Чем точнее мы сможем доставлять версии до нашего QA и наших бэкеров, тем лучше в конечном итоге будет игра.
Эти новые системы и процессы были инициированы для замены очень серьезных ограничений, с которыми мы столкнулись ранее. Мы взяли дополнительное время, что бы сконструировать их как следует, и для того что бы сделать все правильно, нам понадобиться верным образом их интегрировать (протестировать, определить ошибки и тд). Но уже сейчас мы видим значительные улучшения: новая система гораздо более надежна и обрабатывает одновременно больше игроков, благодаря улучшенному сетевому протоколу и гибкой серверной архитектуре сервиса. Короче говоря, то что мы делаем улучшает игру сегодня и закладывает основу для гораздо больших вещей в будущем!
Как будет обстоять дело с физикой реквизита и различными объектами, сможем ли мы взаимодействовать с ними? Например, стаканы и кружки, которые можно будет сбросить со стола, мусорная корзина, которую можно будет опорожнить и поставить снова на своё место?
Всё это будет. Вы уже сейчас можете видеть в Ковалекс, летающие повсюду предметы, которые являются сущностями локации (region entities), которые вы можете отталкивать. Были замечательные видео, в одном из которых игрок взял машину для нарезки лапши, дотолкал до Констеллейшен, и привез эту машину на Олисар. Так что, отвечая на вопрос – да, это возможно. Очень много «сущностей» существует в Порт Олисар, просто мы пока не все их активировали.
Если чашка стоит на столе, и она не двигается, ничего не мешает «обновить» этот предмет, чтобы можно было совершать что угодно, с этой чашкой, и чтобы эта информация передавалась по сети. Пока CryEngine не очень хорошо справляется с этой задачей и мы тратим очень много времени на переделывание и выпуск фиксов для этой проблемы. Т.к. этот движок заточен для одиночной игры, поэтому идет много обновлений для игрока, но проблема в том, что в одном инстансе в Крусейдере могут быть шестнадцать игроков, они все летят к разным спутникам связи, запускают разные ИИ, в разных местах сервера, и так же приходит информация о каждом одиночном клиенте, что творится с разными ИИ. Допустим, один игрок летит к спутнику А, а другой летит к спутнику Б, но не мне нужно знать, что происходит на точке Б, мне нужно знать, что происходит в моей зоне.
Так что нам нужно переделать обновления каждого объекта, и сетевые сообщения, чтобы передавалось каждому игроку то, что он именно видит перед собой, нам нужно сделать более эффективную сетевую версию, для простых твердых тел (rigid bodies), таким образом, чтобы с кружкой на столе, у вас было больше возможностей для взаимодействия. Идея в том, чтобы физиализировать стулья, чтобы их можно было толкнуть, или сделать ещё что-нибудь. Если вы летите на корабле и вдруг отключилась гравитация, то тогда, не приделанные намертво к полу вещи и предметы, будут парить в воздухе. Это определенно наша цель, к которой мы будем стремиться.
Какие у вас мысли насчет возможности стрима того, что происходит на экране другого игрока, через «шлем» или «нос корабля», т.е. специальный модуль-камеру? Это было бы полезно для разведки, исследований, хакерства данных\перехвата данных, для видео-стримов FPS CQB.
Я не уверен, но, кажется вы не имеете в виду живые стрим на Твитче? Просто в будущем мы планируем сделать полный стрим всех действий игрока, эту функцию можно будет включать\отключать. Что-то вроде share на Playstation4, когда можно будет записывать кусок игры и выкладывать его в сеть. Можно будет посмотреть на ID пользователя и, если у него рядом горит маленькая красная точка, значит он стримит, можно будет нажать кнопку рядом и присоединится к просмотру.
Так же я хочу расставить камеры по всей вселенной, наподобие дорожных камер, на самых оживлённых звёздных трассах. Вы бы могли в качестве наблюдателя (spectator) смотреть, что происходит, например, в Терре или вокруг Крусейдера, и т.д. У нас уже есть Reliant News Van (новостной вагончик), который позволит вам попробовать себя в качестве репортёра, вы бы смогли передавать новости вживую, именно для этого и нужен этот корабль. Можно будет стримить новости на сайты, или в игру.
Если вы будете в игре, сидеть в баре, возможно, вы сможете увидеть последние новости по ТВ. То же касается и записей гонок. Мы хотим сделать Кубок Мюррея, чем-то реальным, чтобы были гоночные сезоны, квалификации т.п. Вы сможете, сидя в баре, наблюдать за любимым гонщиком по ТВ. Люди смогут тренироваться и состязаться, так же как сейчас в Арена Коммандер. Игра в игре.
Надеюсь, я ответил на ваш вопрос. Я не совсем понял, хотите ли вы видеть игру, от лица другого игрока или же просто с другого поля зрения? Это сделать не сложно, достаточно просто будет переключить угол обзора (viewpoint). Это уже возможно, к примеру, за турелью Супер Хорнета – у вас открывается совершенно другой угол обзора.
Когда-нибудь в будущем увидим ли мы большее количество игроков в одном инстансе?
Да, безусловно. Единственное, что заставляет устанавливать ограничения сейчас — это пропускная способность серверов и их быстродействие. Когда станет доступно более мощное железо и технологии, мы просто увеличим лимит игроков.
Инстансы будут пытаться собрать друзей и членов корпорации вместе, но у алгоритма могут быть и другие приоритеты в наполнении инстанса. Гарантированно по инстансам не раскидает членов одного сквада.
Что касается инстансов в ПВ, если я преследую кого-то, через несколько солнечных систем, как я могу быть уверен, я буду в одном инстансе с этим человеком, каждый раз?
В, данном случае, все относится к системе «В поле зрения». Когда вы следите за кем-то, как в описанном примере, вы можете пометить цель как «в поле зрения», на вашем МобиГлас\корабельной системе, это значит, что вы будете попадать с целью в один инстанс, каждый раз. Тут есть различные категории, есть «ВПЗ», друзья, враги (последние двое будут зависеть от личных друзей\врагов и друзей\врагов организации). Таковы наши соображения о системе соответствия, так что скорее всего, вы будете в одном инстансе с вышеназванными лицами, а не с кем-то другим. Так же это будет касаться и планет. Было что-то вроде рецензии, на эту тему, в Кампании ЗГ, это все еще считается целью для нас (goal), мы надеемся все сделать как следует. Мы еще работаем над цифрами в инстансах, сколько мест будет для друзей\врагов\ВПЗ и т.д. но все это будет проверятся по мере тестирования.
На частные сервера будут доступны обновления основной вселенной, но пока мы обсуждаем с Крисом как это будет реализовано, так как если давать доступ сразу то скрытые места будут сразу известны на частных серверах. Один из вариантов это давать возможность загружать скрытые места после того как они будут найдены в основной вселенной.
Частные серверы Star Citizen будут получать все обновления с сервера устойчивой вселенной. Однако серьёзные различия в их работе не позволят выпускать эти апдейты одновременно. Крис Робертс планирует выпускать нововведения в виде необязательных контент-патчей, включающих в себя все важные дополнения за определённое время: новые корабли, предметы и т.п.
Игроки смогут запускать на своих серверах приватную версию устойчивой вселенной. Хоть она и будет выглядеть как камерная копия, игрок получит что-то вроде современной версии игры Freelancer.
Для серверов разработчики используют распределённую базу данных Cassandra, которая классифицируется как система управления noSQL.
Все расчёты будут происходить исключительно на сервере, но для быстрых и динамичных боёв это неприемлемо из-за существенно возрастающей задержки. Поэтому перемещение игрока и траектория его выстрелов будут обрабатываться клиентами, а сервер только проверит эти данные. Если он заметит сильное отклонение от нормы или нетипичное поведение (плохое качество соединения или "читерство"), то все расчёты для этого игрока временно возьмёт на себя.
Меня уже доконал сетевой код в Battlefield 4. Как вы планируете бороться с хакерами в Star Citizen?
Мы прилагаем все усилия к тому, чтобы у всех игроков были равные условия. У нас сервер следит за всеми их действиями, но доверяет некоторую часть симуляции клиенту. Как только появляется ощутимая разница в результатах, сервер утрачивает доверие к этому клиенту и корректирует его симуляцию своими данными. Звучит сложно, но «симуляция на клиенте» положительно скажется на управлении кораблём — оно никак не будет отличаться от «сингла» по плавности и отзывчивости. Подобный подход нейтрализует такие виды взлома как «aimbot», а до запуска игры мы надеемся найти большинство других уязвимостей.
Мне интересно, к какому количеству людей/кораблей занимающих туже систему или небольшую площадь в системе вы стремитесь? Очевидно, что космические сражения будут важными событиями, особенно когда кто-то пытается контролировать определенную область или объект.
Крис говорит, что он еще не уверен в том, сколько людей они смогут разместить на одном инстансе сервера. Цель состоит в том, чтобы было 100 игроков или около того. CIG много работает над сетевым кодом и серверной составляющей, так чтобы большее количество игроков могло находится в одном инстансеа. В звездной системе могут быть тысячи игроков, однако вы не сможете увидеть всех людей сразу из-за работы системы инстансов. Вы будете группироваться с людьми на основе дружбы, вражды и других факторов.
С учетом недавнего отказа от оффлайнового режима в Elite: Dangerous, возникает вопрос, собирается ли CIG и дальше работать над Squadron 42 и частными серверами для Star Citizen?
Да. Если вы скачаете Squadron 42, то сможете играть в него полностью в оффлайне: на лэптопе во время путешествий, или когда вам вздумается. Вы не сможете использовать отдельные мультиплеерные функции, но это логично, и я об этом уже предупреждал.
И мы по-прежнему собираемся реализовать серверную часть для личного использования. Конечно, она не будет полностью копировать официальную, потому что это просто невозможно: официальная вселенная будет распределена среди сотен и, возможно, даже тысяч серверов, которые станут отвечать за моделирование экономики, матчмейкинг, базу данных вселенной и работу самих инстансов. Так что частные серверы будут больше походить на те, что были подняты для «Фрилансера», – с лимитированной базой игроков и с возможностью использования модов. Апдейты основной вселенной не будут выходить для частных серверов одновременно, поскольку для их доработки под меньшие масштабы потребуется некоторое время. Но мы сделаем частные сервера, как и обещали изначально.
Мы строим нашу серверную инфраструктуру на Google Compute, и делаем кучу вещей типа динамического разворачивания и сворачивания серверов по требованию. Мы можем иметь дополнительную серверную инфраструктуру помимо Google Compute, но это потребует дополнительной логики и кода. Так что на раннем этапе (типа предваряющего запуск Star Citizen v1.0) размещение наших серверов будет ограниченно местами прибывания Google Compute.
Про игровые инстансы: что произойдёт, если я взял задание на убийство пирата, а в параллельной копии его поймают или убьют раньше меня?
Ваше задание станет недействительно. Миссии подобного плана не будут давать точных координат: просто объявляется награда за поимку или убийство «крутого» NPC, кто успел первым — того и награда.
Если я нахожусь в инстансе и решил сбросить свой груз вне поля зрения, прежде чем вступить в бой, но никто не выжил, что произойдет с грузом?
Если в инстансе никого нет определенное количество времени, то он закроется и все его содержимое исчезнет.
Смогут ли игроки, передвигающиеся в составе большого флота, высылать вперед разведчиков? Как это будет работать с инстансами и системой подбора врагов под игрока (matchmaking system)?
Если вы путешествуете в составе большого флота, вы посылаете вперед друга на корабле, и он летит в другую зону. Как эта система будет работать: мы передаем вас другому серверу, если в этой зоне космоса слишком много народа, на этом сервере. Т.е. если в самом начале только два человека в звездной системе, а на сервере может быть максимум 50 человек (цифры не окончательные), эти два человека будут посланы на один и тот же сервер, если их будет 10, они так же будут на одном сервере; как только мы доходим до максимума на сервере, к примеру, 50 человек, а потом получается и 60 человек на сервере, тогда вот что происходит, мы говорим: «давайте-ка посмотрим на локации» и «вот достаточно плотно населенная зона, к примеру, планета», допустим это Земля, на Земле будет собственная, отдельная серверная зона, и люди вокруг Земли, будут подпадать под действие этого сервера, а люди на другом конце Солнечной Системы, к примеру, рядом с Плутоном, будут перенесены на другой сервер. И так мы будем разделять игроков на другие серверы, по мере заполнения Солнечной Системы, и потом еще будет несколько серверов, которые будут отвечать сугубо за инстансы. Мы хотим держать людей вместе, если они будут из одной организации, если они друзья или просто знакомы друг с другом. В большинстве случаев, только если вы не попадете в огромную битву с постоянно прибывающими игроками, то вы всегда можете послать кого-нибудь на разведку, к ближайшему астероидному полю, они вернутся и скажут: «окей, там все тихо» или «там похоже засела пара пиратов!», после чего туда сможет прилететь оставшаяся часть флота, и все они будут на одном сервере и в одном энкаунтере. Даже если вы были на разных серверах, потому, что вас было слишком много в Солнечной системе. Если астероидное поле управлялось отличным от флота сервером, мы всегда будем держать на сервере открытые слоты для друзей или тех, кто хочет присоединиться. Когда ваш разведчик вернется, от напишет «Привет! Подключите меня к себе!» и он вернется обратно во флотилию. Если же флот будет слишком большой, то тут нам придется принять решение: держать его вместе или разделять. Тут мы еще не придумали, как нам поступить, наверное, это вопрос будущего.
Будут ли большие корабли, типа Джавелина или Бенгала или даже большие, чем они, вести себя в космосе, как космические станции и существовать во всех инстансах одновременно или же они будут добавляться в единичный инстанс, каким-то образом?
По-разному, но самый большой корабль, с которым вы сможете сражаться и занять его, будет в инстансе. Будет невозможна ситуация, когда один Бенгал, находится в четырех инстансах одновременно, все с ним сражаются и все хотят его захватить. У нас будут схожие правила и для больших кораблей, космических станций и астероидных баз. Космические станции, существуют только в одном инстансе и этот инстанс невозможно скопировать. Разница будет в том, что, если вы на орбите Земли, вокруг вас могут быть тысячи людей, т.е. будет 100 человек, за один инстанс и 1000 игроков, 10 различных инстансов, поддерживающий этих игроков, и все эти инстансы могут быть в различных местах вокруг Земли. Если вы один из этих игроков, вы, наверное, никогда не сможете увидеть ВСЕХ игроков вокруг Земли, одновременно, а те, кого вы УВИДИТЕ, будут друзьями, ВПЗ, врагами. В случае с космической станцией\Бенгалом и т.п.. только один из этих инстансов будет включать в себя такой большой корабль\станцию, в нём (инстансе), их можно будет захватить. Возможно будет только 100 человек, которые смогут подлететь для абордажа, или 100 человек, максимум, смогут сражаться с таким кораблем, и система будет выбирать, кого включить в этот инстанс.
Каков сейчас статус инстансов?
Уже можно создавать инстансы. Они уже нацелены на до 200 игроков в одном инстансе, после переделки кода, который будет готов к 3.0, это даст огромный прирост производительности. В дальнейшем они будут использовать мешинг серверов, чтобы позволить большему числу игроков в одной зоне взаимодействовать друг с другом (до 2000).
Присутствие на кораблях. Будут ли капитальные корабли, такие как Джавелин оставаться в космосе, после того, как все члены команды уйдут в офлайн?
Будет ли необходима защита или команда ботов, для предотвращения повреждений корабля или его кражи?
Чтож, это достаточно хороший вопрос, ибо вы знаете, что если вы будете приземляться на планету, то ваш корабль просто будет отправляться в ангар и ни у кого не будет доступа туда.
Что касается капитальных кораблей, то я думаю, будет что-то вроде безопасной зоны, где может находиться корабль и если все уйдут спать,
то ничего с ним сделать нельзя будет: ни войти, ни ограбить, ни захватить, ни разрушить.
Если же оставить корабль в небезопасной зоне, то возможно потенциально будет так, что будут использоваться спальные места. которые есть уже на кораблях.
И, когда вы ложитесь в них и выходите из игры, то игра будет сохранена, и корабль будет помещен в инстанс, где не будет никого, кто мог бы с ним что-то сделать.
Думаю, что примерно тоже-самое будет происходить и с капитальными кораблями. Ведь мы определенно не хотим, чтобы было так, как когда вы заходите в игру и говорите "Ой, а где же мой корабль?"
Также, мы все понимаем, что если вы в реальности спите на корабле, то и просыпаться вы будете там же.
Уже есть несколько кораблей с большим экипажем, которые позволяют иметь на борту «гостей», больше, чем мест для экипажа. Например, морские пехотинцы в Редимере или пациенты в Красном Катлассе. Вот каков мой вопрос: будет ли балансировка игровой механики, предотвращающая абсолютный максимум людей на борту корабля (экипаж+гости), например, нехватка оборудования для поддержки жизнедеятельности, уровень CO2 и т.д.?
Хороший вопрос. Потому что, когда мы запустим игру на полную и у нас будут большие корабли, мы позволим всем пользователем спавнится, все вылезут из своих кораблей и мы посмотрим, сколько людей может влезть в один корабль. Что касается количества людей на корабле, я думаю, все будет ограничиваться сервером, потянет ли он много людей или нет. Мы еще не решили, сколько людей максимум сможет находится на одном сервере, но, конечно мы сохраним места для ваших друзей, ваших врагов, людей, находящихся в вашем поле зрения, других людей, который будут летать рядом, так что мы втиснем 50 или 100 человек в один инстанс, но не думаю, что все они будут вашими друзьями. Так что вопрос, смогут ли 50 человек втиснутся в Редимер, а они не смогут, ваши действия тогда? Попробуете взлететь? Сможет ли взлететь Редимер? Или он не сможет летать, пока на нём превышен абсолютный максимум находящихся на нём людей? Я думаю, правило будет такое: все, кто сможет попасть на борт корабля – они на борту корабля. Это не будет мешать вам летать, но может заблокировать пролёт сквозь прыжковую точку. Мы еще не решили, какие ограничение на количество людей на борту будут. Как мы и говорили, после запуска игры, пустим всех и посмотрим, как это будет влиять на игру.
Но идея с системами поддержки жизнедеятельности и уровнем CO2 – очень хорошая, мы примем её во внимание, когда будет думать о лимитах людей на кораблях.
Если вы являетесь частью экипажа на большом корабле, и владелец корабля умирает или уходит в оффлайн, то корабль тоже погибнет со всем экипажем?
Нет. Идея будет в том, что если владелец умирает или уходит в оффлайн, то на корабле остаются другие реальные игроки, и корабль останется в игре, он не исчезнет пфф и не появится мгновенно на родной планете. Нам еще предстоит решить несколько проблем, связанных с этим вопросом, типа, если владелец корабля вышел из игры, а потом вошел снова, что будет с игроками на корабле? Они снова появятся на корабле? Нам еще предстоит решить вопрос с этим, но корабль точно не будет исчезать вместе с игроками. Но это все произойдет уже после 2.1, в будущем.