Вопрос о генерации мира

Когда игрок начинает новую игру, как происходит генерация - в момент загрузки всей сессии или прогружается вокруг игрока? Предметы, которые будут выбиты из мобов, - это сразу решено, в ком что будет, или генерируется в сам момент убийства? Мобы расставлены на своих местах с самого начала или появляются только, когда я вхожу на уровень?
Если я куда-то не пошел, можно ли сказать, что я упустил находящегося там моба или предмет, или я ничего не упускал, поскольку там ничего не было?
Я-то сам склоняюсь к варианту генерации на ходу, но на всякий случай решил уточнить.

2 лайка

Если учесть тот факт что мобы напрямую загружается с сервера(о чем нам и говорили разработчики во время анонса д3 ) то наиболее очевидным будет факт что они расставляются ( генерируются) на карту при входе игрока на локацию

Лайков: 1

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

3 лайка

То есть если я прошел мимо Лурейских пещер, в которых у меня на ачивку не убито еще 3 моба, я их не упускал, т.к. они не сгенерились?

Лайков: 1

Если это мобы, привязанныеик к конкретной локации, то не войдя туда, ты не дал шанса им сгенеритться. Значит можно сказать, что упустил. Если, конечно, я правильно понял твой вопрос. Ачивками не увлекался никогда=)

Лайков: 1

Тут резонно встаёт попутный вопрос про генерацию вещей, а именно:
Как объяснить тот факт, что, зайдя в игру на любую локацию или на определённо выбранную заранее, в текущем сеансе игры, игрок получает, скажем, одну синьку (синие вещи) или не получает вообще ни каких вещей. А если перезагрузить игру полностью совсем, из лаунчера и зайти туда же на том же уровне, игроку падают и легендарки часто, и даже первозданки, и гоблины чаще встречаются.
Вот как это объяснить? При запуске игры игрок попадает на определённый сервер?, или как?

Лайков: 1

Попробуй объяснить рандомом=)

3 лайка

Диабло 3 это рандом)

Лайков: 1

Ты конечно же хотел сказать “никаких”. Потому что вот так оно устроено в русском языке.

Как раз наоборот. Если бы они генерились сразу при загрузке сессии, а я прошел мимо, то я бы их упустил. А их не было, так что не упускал. Суть-то в том, что они супер-редкие, поэтому “не сгенерились” - это лучше, чем “сгенерились, но были оставлены в покое”. Впрочем тут уже философские дебри.
Правда тут еще непонятно, как тогда работают поручения на убийства элитных. Поручение “убить такого-то моба” было дано с самого начала сессии, а не когда вошел на локацию.

Лайков: 1

Поручения обновляются когда делаешь релог(ну то есть перезаходишь в игру), а в лурейских пещерах у тебя скорее 3 моба остались такие как камнееды или пещерные летуны. Камнееды прячутся под землёй, а летуны вылетают из всяких ям, которые там есть.

Лайков: 1

Не думаю что мир кем-то генерится, скорее всего сам рандомно развивается.

Лайков: 1

Личинкомать я уже грохнул. Осталась только летучая мышь (желтая).
Вообще конечно очень тяжело даются многие мобы. По 30-40 раз обыскивать одну локацию - это неправильно.

2 лайка

Это очень не нравилось Эйнштейну, но учёные доказали, что Луна действительно не существует, когда на неё никто не смотрит.

Программирование любой игры сложнее самой этой игры на столько же, насколько то, что под капотом у БМВ, сложнее цепи у велосипеда. Поэтому любые попытки объяснить то, что ты хочешь, на данном форуме приводили в прошлом к минусаторству и обвинениям в “заумности”.

TL;DR и VLR (Very Long Read!)

Я вас предупредил :wink:

Но я всё же передам смысл одной давно канувшей в небытие темы с раннего ванильного форума. Но перед тем, как понять устройство дропа, необходимо разобраться с тем, как вообще организованы ММО-игры.

Устройство ММО-проектов в целом...

Главная идея: по офф.данным, на старте игры было больше 10 млн. активных игроков, которые все играли одновременно. А один сервер тянет, допустим, всего 10 тысяч (в реальности меньше). Поэтому проблему решали добавлением серверов. Как это могло бы быть реализовано?

Во-первых, в игре нет такого понятия, как “просто сервер”. Есть несколько типов серверов. Например, стартовый экран - это так называемый “дорвей-сервер”, локации - “айтем-сервер”, а дропом заведует “дроп-сервер”. Что происходит при входе в игру?

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

Игровой сервер виртуализирован. Это значит, что на одной физической железке крутится несколько таких игровых серверов, каждый из которых называется “пулом” - и если железка способна, допустим, “держать” одновременно 10 тысяч игроков, то конкретный пул лимитирован, к примеру, всего 100 игроками (но на сервере крутится 100 пулов). Это при том, что в игре вы можете одновременно играть всего вчетвером.

При входе в игру игроку показывают трёхмерный старт-скрин, а при заходе в саму игру его рандомно переключают на один из игровых пулов.

Общая идея в том, что если у вас есть 10 млн аккаунтов, а один сервер держит всего 10 тыс игроков, то у вас есть целая тысяча серверов - но в игре всего сотня локаций. Поэтому вообще нет необходимости эти локации как-то подгружать на конкретный сервер: они крутятся там постоянно. И для каждой локации у вас всё равно ещё останётся по 10 серверов, каждый из которых крутит одну и ту же локацию.

Поняв вот эту вот идею, можно понять, как устроен дроп в игре.

Если у вас есть шахматная доска (локация) и шахматные фигурки (монстры в игре), то доска всё время может просто лежать на столе - а фигурки вы ставите и снимаете в зависимости от игры на ней. Аналогия в том, что нет необходимости каждый раз прокачивать вот все эти гигабайты игровых текстур, анимаций и всего остального, что нужно для 3D-локации. Это всё постоянно в памяти игрового сервера.

Но т.к. для каждой локации нужен свой набор трёхмерных объектов (первый акт это текстуры монастыря, второй - пустыни и т.д.) то набор данных для каждого сервера сокращается в разы.

А дальше происходит следующее: так же, как в шахматах, каждый игровой сервер обсчитывает игровые события в своей неизменной (потому что одной-единственной для каждого игрового сервера) локации для каждого игрока из пула в сотню. Но синхронизация игроков сделана только для четвёрок игроков.

Это подтверждается тем, что в ранней ванильной версии Диабло 3 существовала ошибка, при которой иногда на одном сервере бегали пятеро игроков одновременно.

Так вот. Эти четвёрки в игре не пересекаются друг с другом, но важно понять, что они всё равно бегают в одном пуле из сотни человек!

Если вы всё это поняли, то дальше - вторая часть, в которой уже собственно, о том, как устроен дроп в ММО-играх.

А теперь о дропе...

Понимаете, что получается?

Вместо того, чтобы каждый раз запускать рандом-генератор на то, чтобы решать, какой предмет выдать игроку, мы уже ЗАРАНЕЕ запускаем рандом-генератор, определяя, на какой игровой сервер и в какой пул попадёт игрок!

Отсюда дальнейшая оптимизация: остаётся разделить дроп на части и прописать каждому пулу по своей таблице выдаваемых предметов. Помните, что у нас есть минимим по 10 серверов, каждый из которых крутит одинаковые локации? Делим триста легендарок на 10, получаем (условно) 30, которые вам может выдать сервер в конкретном пуле. Это называется “таблицами дропа”. Они делятся на части и раздаются игрокам.

Поэтому, если рифт “пустой”, то он и весь “пустой”. Или, если выпал нужный вам предмет, то есть смысл фармить “до столба”, т.к. предмет есть в дропе. Опытные и много играющие игроки уже по составу первых вапавших предметов примерно понимают, что может выпасть дальше, т.к. таблицы одни и те же и меняются сравнительно редко.

Тех, кто сомневается в существовании таблиц дропа, отсылаю к интервью Тревиса Дея, в которой он рассказал об их существовании явно.

Вы же всё равно зачистите не один рифт, а штук 100. Поэтому даже если с одного рифта вы получите бедный дроп, а с другого - богатый, то в среднем получится нормальный и одинаковый!

Так вот, в ванильной версии до определённого момента работала схема, при которой “счастливые” сочетания виртуальных адресов пулов (айпи+порт) были “приколочены гвоздями”. Но после того, как это прочухали игроки, схему пришлось сделать более динамической.

Итог: счастливые сервера всё равно есть, но на какой именно вы попадёте, решается каждый раз заново в момент открытия столба с порталом.

Отсюда становится понятно, в момент, когда вам что-то должно дропнуться, не генерится ничего вообще!

Как так?!...

Таблицами дропа необходимо как-то управлять. Это означает, что вам надо уметь менять таблицы на конкретном сервере. А у вас уже есть разделение игроков по серверам, пулам, локациям и группам предметам.

Поэтому в момент получения предмета работает ещё более хитрая схема)))

Предмет генерится на весь пул в 100 игроков целиком!

Йопс… это как вообще? А очень просто: раз есть пул, то это означает, что игроки уже автоматически выстроены в очередь. Не нужно вычислять никому никакой рандомной вероятности в момент получения предмета - нужно лишь отсортировать игроков по приоритету получения предметов - и вуаля!

Поэтому, в момент каждого-каждого-каждого ивента на получения предмета, игровой (локационный сервер) отправляет запрос на предмет на весь пул (очередь из допустим, 100 игроков) в целом. И дальше спускает его по этой очереди, как по трубе.

Первый игрок предмет получал недавно? Проезжаем. Второй хорошо одет? Опять проезжаем. Отсюда забавная ситуация, когда бегает патька из троих “дядек” (которые быстро-быстро зачищают всю локацию, но жалуются, что им ничего не сыплет) и одного умного “малышка”, который никого не может убить, но зато знает про айтем-серверы, а поэтому молчит в тряпочку и собирает омг-подарки за всех троих)))

Но как только он оденется, его приоритет в очереди упадёт и дроп, соответственно, станет хуже.

Таким вот мудрёным способом достигается оптимизация. Разумеется, описан не конкретный подход Д3, а общий и (ппц вообще, да?) упрощённый. Но, как известно, “мир состоит из атомов”, а остальное вы додумаете самостоятельно))

Бонус, чтобы окончательно свернуть мозги ;)

Если вы разработчик ММО-игры, то помимо раздачи дропа, у вас ещё стоит проблема безопасности игры. Не забывайте, что даже в Д3 на старте был RMAH (аукцион за вполне реальные деньги!), поэтому дроп должен быть организован так, чтобы никто из рядовых сотрудников (типа сисадмина, меняющего сервера) не мог подкрутить ничего на конкретном сервере (чтобы прото запомнить его признаки и скипать остальные сервера, имея игровое преимущество).

Поэтому все-все-все вот эти игровые ивенты (локации, предметы и вероятности) хранятся по такой вот замысловатой схеме, где всё по раздельности и ничего не лежит в одной корзинке.

Например, меняя сломавшийся сервер на новый, пулы должны разворачиваться из совершенно одинаковых образов - а потом они тупо блокируются от какого-либо доступа извне - и только после этого сугубо по рандому решают, какие таблицы дропа кому заново стянуть и с какой вероятностью он будет раздавать игровые предметы.

Со одной стороны, вмешательство со стороны оказывается невозможно и недоступно для персонала, у которого есть доступ к самим серверам, но нет прав ))). А с другой - таблицы дропа тянутся централизованно, поэтому игрой можно управлять, меняя эти самые таблицы (которые состоят из чего-нибудь вроде описаний пар “предмет+вероятность”). Чем и занимаются разработчики из условного центрального офиса Д3 уже 7 лет.

Однако эта система иногда приводит к парадоксальным казусам: например, предлагаемые предметы на первой странице ванильного аукциона в Д3 зависели от того, что надето на игрока. Нет у вас, допустим, перчаток - и аукцион автоматически предлагает купить.

Аук не выпилили; ему просто заблокировали интерфейс и все зависимости всё равно остались. Поэтому теперь, если у вас уже полно критшанса на предметах, иногда можно например, упариться роллить у кидалки КШ на предметах или предметы с КШ.

Либо игру может так “заклинить”, что один игрок получает детали посоха для пони-левел чуть ли не с первой попытки, а второй сделает триста и ничего не получит.

Или ваш шанс что-то получить может зависеть от того, насколько давно вы получали очередную ачивку за количество выполненных баунти - или за убийство “ачивочного” монстра из списка. И т.д. и т.п.

Дело в том, что из-за стохастичности принимавшихся в истории игры решений, как именно работает вся эта система, не знает в точности уже вообще никто, включая самих разрабов, которые успели 10 раз поменяться )))

Отсюда вывод:

Никакого рандом-генератора как конкретного механизма в игре нет - он распределённый и реализован иными принципами.

И наконец, аукцион )))

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

Теперь делаем выводы:

  • в начале сезона ни у кого ничего нет и айтем-сервер всем всё раздаёт равномерно;

  • в конце сезона “папики” уже собрали на себя кучу предметов определённого типа (т.к. все топ-билды в игре всё равно как под пипирку).

Айтем-сервер смотрит: “ха! в игре дохрена сапог” и фиг вы получите свой красный лук Яна.

Как-то вот так…

3 лайка

Ещё интереснее устроен реальный мир… о_О

Например, принцип неопределённости Гейзенберга доказывает, что в нашем мире невозможно одновременно определить все характеристики любого предмета до единой.

Знаем скорость и массу? Значит, координаты будут плюс-минус. Знаем что-нибудь другое? Обязательно останется что-то одно, что физически принципиально невозможно точно определить.

Подобные вещи говорят о том, что и в рельном мире тоже есть игровая оптимизация. А значит, наш реальный мир — увы, увы, всего лишь ещё одна компьютерная игра.

А вот такие вещи, как эта (ссылка на вики):

https://ru.wikipedia.org/wiki/Синхроничность

доказывают это со всей необходимой определённостью.

Легенда о сотворении Мира

В силу ограниченности современных знаний человечества об устройстве мира, пока можно лишь формировать его на уровне «Сабудай-богатырЪ подрался с драконом, из хребта которого выросли горы, а из горячего дыхания — Солнце». Но, тем не менее, кое-что сказать уже можно.

Ключевая идея нашего мира — в том, что он является одним из пограничных миров.

Идея была в том, что для “нормальных” миров создаются так сбалансированные области материального пространства, чтобы хаоса в них было существенно меньше, чем порядка. Например, оптимальным считается значение в два процента неопределённости.

Однако потом возникла одна проблема. Когда жизнь настолько хорошо устроена, что всё, что может вас разочаровать, это всего лишь случайно удариться пальцем об угол, то особой потребности что-то менять попросту нет. Живи-не хочу, на 98% райские условия.

Отсюда возникла идея: не пойдёт ли развитие быстрее, если поднять уровень негатива до бОльших значений?

Была выделена область Тёмных Миров с нечёткой границей, по мере продвижения вглубь которой количество негатива возрастает — и в конечном итоге становится сильно больше, чем позитива (вплоть до того же самого значения в 98%, только уже наоборот). Внутри пузыря находятся так называемые Адские Миры, снаружи — Райские.

И так получилось, что Земля находится ровно на значении в 50% того и другого. Поэтому она, в каком-то смысле, совершенно уникальный мир.

Принцип выравнивания

Для поддержания заданного соотношения негатив/позитив работает глобальный Принцип Выравнивания.

Как он действует?

Он старается поддерживать баланс между негативом и позитивом для достижения заданного значения (для Земли — ровно в 50%). Не выровненный этим принципом остаток называется “остаточной кармой”.

Это означает, что если у человек детство было ну совсем безоблачное, просто очень-очень счастливое, а взрослая жизнь нейтральной, то старость скорее всего окажется просто ужасной. Или наоборот, тоже частая ситуация: кошмарное детство, но счастливая старость.

Или, если у вас есть любовь и всё хорошо в семье и в порядке с деньгами, то может не быть здоровья. А если наоборот: полно здоровья и есть любовь, то плохо с работой. Принцип неопределённости Гейзенберга.

Обычно закон выравнивания действует по принципу добавления/убавления материальных условий человеку в зависимости от количеств того ментального позитива или негатива, который он привнёс в окружающий мир.

И в этом его главная проблема.

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

Именно поэтому, например, Рембрандт — уже став великим художником — в конце своей жизни валялся в пыли. А вот современный Бенкси поступил иначе: его нарисованные на стенах домов картины (это вообще даже не картины, а графика) вызывают в людях скорее негативные эмоции с позитивным итогом — их целью являются экология, борьба с бедностью и т.п. тематика. Кроме того, так называемый «Бенкси» действует, по сути анонимно — его никто и никогда не видел. Т.е. люди, которые смотрят на его картины, не могут понять, кто их на самом нарисовал. Ведь «Бенкси» — это всего лишь условный псевдоним.

Таким вот способом настоящий художник, который стоит за этим никнеймом, обманул Закон выравнивания, который совершенно не видит распространяемого «Бенкси» позитива, зато фиксирует одни лишь негативные эмоции от просмотра — и поэтому добавляет ему за такой подход немало миллионов долларов наличными после продаж на Сотбис. При этом реальный Бенкси (кто бы он ни был) не скатывается до уровня экранных прошмандовок.

И такой подход намного умнее, потому что следующее воплощение человек получит — в зависимости уже реального, долговременно вычисленного уровня привнесённого позитива или негатива — в одном из Райских или наоборот, Адских миров.

Лайков: 1

Это даже если не брать в расчет тот факт, что и скорость и масса и прочие известные величины - все придумано человеком. В абстрактном абсолюте нет и этого. Есть вещи во вселенной и все. А уже человек описывает его характеристики. Какие видит.

Лайков: 1