Размышления о заточке в Lineage

В этой статье я просто выложу собственные размышления о заточке в нашей любимой игре Lineage 2. Размышления пойдут с точки зрения программиста, поэтому желательно знать, хотя бы на базовом уровне, как работает компьютер. Если не знаете — посмотрите кратенькое видео https://youtu.be/RwSLO953anc (около 10 минут). И да, повествование может быть слегка сумбурным, но это только потому, что очень много информации, которую я попытался объединить в одной статье. По хорошему — тут нужно десяток таких статей.

Кому лень читать — внизу статьи руководство к действию!

Корейский рандом, или просто рандом? Разрушаем мифы.

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

Как работает заточка?

Итак, как работает заточка? Вся заточка происходит на сервере! Сервер — это такой же компьютер как и у вас, только на нем установлена специальная программа, которая контролирует процесс игры и взаимодействие между игроками. Почему вся заточка происходит на сервере? А потому, чтобы вы не смогли подделать данные на своем компьютере, и отправить их на сервер. Злой дядя Сэм хочет все контроллировать сам!

За каждое действие отвечает программа. Программа — это набор инструкций, как должен вести себя сервер в том или ином случае. В нашем случае, это когда мы перемещаем предмет в ячейку для заточки. Программа получает входящие данные о заточке, о предмете и о предмете повышающем шанс. Далее в ней происходят определенные вычисления, и программа возвращает результат — об успешной или не успешной заточке. Причем эта программа — она написана единожды, и потом она применяется к любому предмету, который вы кладете в ячейку модификации! Это называется ООП (объектно-ориентированное программирование, углубляться не буду — кто интересуется, идите в гугл).

Далее мы подбираемся к самому интересному моменту. Так как программа отвечающая за заточку — одна, то все игроки, которые точат какой-либо предмет, пропускают данные через эту программу.

Небольшой пример:

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

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

Вот самые интересные вещи происходят на сервере, о котором мы ничего не знаем, а можем только предполагать. Достоверно известно только то, что есть определенный шанс заточки, хоть и с неизвестным размером. Тут многие могут возразить, что размер известен и будут приводить скрины откуда из интернета, но поверьте, я искал, и официально ни локализатор, ни корейцы не делали никаких оповещений о шансе заточки. Все скрины которые можно найти в инете — все с фришек, с открытым исходным кодом серверов, написанных на Java. Я думаю, они не отображают действительности.

Размышления о шансе заточки вещей

В этом случае, мы можем предположить, что из определенного количества вещей, отправленных на заточку, какое-то количество будет заточено успешно, а какое-то нет. То бишь попросту говоря сфейлится. Возьмем абстрактную цифру, к примеру 25% — это будет наш шанс успеха. То есть если мы отправим 1000 шмоток на заточку, удачно у нас заточится только 250.

Дальше, шанс заточки можно повысить например камнем, прочитайте внимательно, что на нем написано? Дословно: «увеличивает шанс успеха на 15%», почему меня задела эта фраза? Её можно трактовать по разному. К примеру если шанс успеха 25% — то увеличить шанс успеха на 15% — это 25+15% = 28,75%, или же все таки 25% + 15% = 40%? Я все же склоняюсь к первому варианту, так как много точил с камнями и получаемые результаты не сильно отличались от заточки без камней.

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

К примеру:

Если взять 4 шмотки заточенные на +3, и единовременно попробовать заточить на +4, что произойдет? Да, хоть одна из них заточиться. Возможно это я такой «везунчик», но я проверял. Брал 100 самых дешевых заточек (сейчас это заточки на броню B). Покупал броню зубея (около 15 штук) и точил, точил, точил. Из 100 заточек — самая продолжительная череда фейлов была — 3 шмотки подряд. Самая продолжительная череда успехов — 4, из 70 заточек (30 заточек ушли на заточку на +3 их не учитываем, так как шанс там 100%), 24 успешных, это чуть больше 25%, но я объясню ниже, почему я склоняюсь к 25%. В общем всю броню я спалил, максимальной заточки удалось добится на +9 (точил я от низшей заточки, то есть поочередно).

Почему 25% — данных очень мало. Чтобы определить точный шанс рандома, а это рандом, нужно больше данных, нужно заточить 1000 шмоток, а лучше 10 000. Поэтому шанс на основе самых продолжительных фейлов (а их было только 3 подряд). То есть 4 шмотка из 4 точится — поэтому и 25%.

Размышляем дальше:

Заточку я проводил в самое благоприятное время суток — ночью (даже под утро), когда мало кто точится, по крайней мере, пока я точился, не было ни одного сообщения в чате об успешной заточке. То есть с большой вероятностью можно предположить, что программа, обрабатывающая заточку, была занята только моими запросами.

Небольшое пояснение: я не думаю, что сервер хранит данные долго (а они их хранит непродолжительное время, пока не выгрузится память). Скорее всего, память периодически выгружается, чтобы высвободить ресурсы сервера. Ни один программист в здравом уме не будет хранить данные долго. От силы — данные будут складироваться в базу данных, для дальнейшей обработки (а это несомненно присутствует)

С точки зрения математики и экономики:

Если шанс составляет 25%, то мы бы должны были увидеть на рынке такую картину — заточка следующего уровня, была бы в 4 раза выше в цене, чем предыдущего. Но думаю, это нивелируется экономикой рынка и свитками с шансом успешной заточки сразу на +3 от исходного. Поэтому мы наблюдаем увеличение цены в среднем вдвое (эти данные о шмоте 99 лвл, так как этот шмот является топовым в игре, и цена на него самая стабильная). Разброс на шмотки R и R95-грейда не отражает сути, так как игроки по достижению высоких уровней пытаются переодеться в более сильный шмот и бывает гораздо дешевле продают старый. Но в среднем — и математика отображает шанс в 25%, так как например из 12 шмоток +3, при заточке их с билетами, которые дают шанс заточки на +3 — хоть одна из них да заточится на +3 сразу.

Разрушаем мифы:

Вряд ли программисты будут применять фильтры с дополнительными данными (о дате входа в игру) в классе заточки (часть программы сервера — называется классом). Как вы себе это представляете? А давайте сделаем, чтобы тот, кто не заходил в игру больше года, со 100% вероятностью заточил шмотку? А кому это надо? Чтобы удержать игрока? А если он зашел, и не заточился, вышел, и зашел на следующий день? Все, потеря потерь. Поэтому я думаю, что вряд ли кто-то заморачивался бы такими фильтрами.

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

Во что верю я? Я думаю все-таки это простой рандом, с понятными цифрами, к примеру с теми же 25% шанса заточки. При этом рандом он не совсем рандом, так как его можно победить количеством. Если хотите — заточите больше шмоток, используйте больше заточек, и я уверен, что вы заточите шмот без камней и обычными заточками до нужной величины. Но тут конечно экономический аспект — а где взять адены на кучу заточек/шмоток? Поэтому и «корейский рандом».

Как же точить? Руководство к действию

Играйте а не точите. А если уж руки чешутся — заточите раз в день. Возможно вы попадете в «благоприятный» промежуток времени. Когда несколько игроков подряд сфейлились при заточке, а вам повезет.

Еще немного теории: чем больше фейлов подряд прозводит наш класс заточки на сервере, тем вероятность успеха следующего раза увеличивается!

Либо же чтобы добиться 100% результата:

  1. Точите ночью, под утро, когда никто не точит
  2. Имейте в запасе сразу 20-30++ шмоток, чем больше шмоток — тем больше шанс, что доведете заточку до требуемого результата
  3. Имейте в запасе крепкие нервы и 300 грамм пепси, чтобы залить горе если вдруг не повезет 🙂
  4. Точите от меньшего к большему. Сначала точим все 30 шмоток на +4, потом все по порядку точим на +5 и так далее, пока не останется 1 с максимальным уровнем заточки

И да! Внимание обратите! Эта статья не является руководством к действию! Это просто размышления одного программиста. Спасибо за внимание.

 

 

linca

Web-программист со стажем более 10 лет. Играю в ла2 в свободное время для развлечения. Если вам понравились мои статьи - можете отблагодарить меня по почте на ник linca, на сервере Airin!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *