… или почему комьюнити фришек всегда жалуется и будет жаловаться на дроп.
Итак, если вы заглянули в эту статью, то я думаю вы представляете себе, что такое фришка Aion, эмулятор сервера и так далее.
Так вот, однажды когда мне попался исходный код фришек, я сначала не поверил своим глазам, но перепроверив все открытые исходники, убедился, что так оно и есть, и это кошмар.
Как рассчитывается дроп в оригинальном Aion? У моба/НПЦ, которого игрок пытается убить, есть много гипотетических ящиков с дропом.
1 ящик, это основной дроп для типа моба, там лежат предметы, которые так или иначе выпадут в дроплист с определённым шансом.
2-N – ящиков с различными наборами предметов, с которого может выпасть один, и только один предмет

У каждого предмета есть свой шанс на выпадение. Однако формула расчета тут везде разная.
Для основного дропа, каждый предмет рассчитывается отдельно. Если выражаться условно то в этот ящик закидываются столько удочек, сколько предметов в ящике. Если 4 предмета, то 4 удочки, и тянеееем. Зацепилось что-то вытащили. Таким образом из основного дроп ящика, можно вытащить практически каждый предмет.
Для дополнительных ящиков, работает немного другая система. Берется ящик со всеми в ней предметами, допустим ящик с синими шмотками, перемешивается, после чего туда закидывается удочка, и тянется, если что-то зацепилось, оно выпадет игроку, если нет, то уж извините. Но для каждого доп ящика, удочка кидается одна, и один раз. Шанс вытащить предмет из доп.дропа = сумме шансов для каждого отдельного предмета в ящике. Это значит, что если в ящике 10 предметов с шансом 10, то обязательно выпадет предмет.
Теперь как это работает на фришках. В принципе, это работает почти так же как в оригинале. за исключением того, что:
1) class NpcDrop
Цикл по каждой группе (ящик предметов) дропа в мобе.
2) class DropGroup
Берем случайный предмет из группы
3) class Drop
По шансу этого предмета, определяем, выдает он или нет.
Надеюсь мне удалось объяснить вам как это действует. Попробую показать на картинке, где шанс выбить шмотку будет виден нагляднее.

А почему, спросите вы? Потому-что человек, который писал первую версию фришного сервера, был далекий от игровой механики, и до ума не довел. А те кто открывают сервера по сей день, покупают “корявые” сборки у “криворуких” разработчиков. Вот так вот.
Нынешние разработчики не могут сделать систему взвешенного выбора) - random weighted selection
Пример кода для java
Спасибо за внимание!)
Итак, если вы заглянули в эту статью, то я думаю вы представляете себе, что такое фришка Aion, эмулятор сервера и так далее.
Так вот, однажды когда мне попался исходный код фришек, я сначала не поверил своим глазам, но перепроверив все открытые исходники, убедился, что так оно и есть, и это кошмар.
Как рассчитывается дроп в оригинальном Aion? У моба/НПЦ, которого игрок пытается убить, есть много гипотетических ящиков с дропом.
1 ящик, это основной дроп для типа моба, там лежат предметы, которые так или иначе выпадут в дроплист с определённым шансом.
2-N – ящиков с различными наборами предметов, с которого может выпасть один, и только один предмет

У каждого предмета есть свой шанс на выпадение. Однако формула расчета тут везде разная.
Для основного дропа, каждый предмет рассчитывается отдельно. Если выражаться условно то в этот ящик закидываются столько удочек, сколько предметов в ящике. Если 4 предмета, то 4 удочки, и тянеееем. Зацепилось что-то вытащили. Таким образом из основного дроп ящика, можно вытащить практически каждый предмет.
Для дополнительных ящиков, работает немного другая система. Берется ящик со всеми в ней предметами, допустим ящик с синими шмотками, перемешивается, после чего туда закидывается удочка, и тянется, если что-то зацепилось, оно выпадет игроку, если нет, то уж извините. Но для каждого доп ящика, удочка кидается одна, и один раз. Шанс вытащить предмет из доп.дропа = сумме шансов для каждого отдельного предмета в ящике. Это значит, что если в ящике 10 предметов с шансом 10, то обязательно выпадет предмет.
Теперь как это работает на фришках. В принципе, это работает почти так же как в оригинале. за исключением того, что:
- в ящиках лежит всякое гавно. да да да. Там такой хлам лежит дикий, что просто можно мозг сломать.
- для доп.дропа, система на фришках работает иначе. Из ящика берется случайный предмет, кладется в пустую большую коробку, и закидывается удочка. Допустим – из ящика с синим шмотом, берется случайный предмет, кладется в другой – пустой – ящик, и туда закидывается удочка. Если ничего не зацепилось, то синего шмота не видать. В общем так, для каждого ящика. Размер пустого ящика зависит от процента на предмете. Если процент 10, то ящик в 10 раз больше, если процент 1, то ящик в 100 раз больше.
1) class NpcDrop
Цикл по каждой группе (ящик предметов) дропа в мобе.
Java:
Please,
Вход
or
Регистрация to view codes content!
2) class DropGroup
Берем случайный предмет из группы
Java:
Please,
Вход
or
Регистрация to view codes content!
3) class Drop
По шансу этого предмета, определяем, выдает он или нет.
Java:
Please,
Вход
or
Регистрация to view codes content!
Надеюсь мне удалось объяснить вам как это действует. Попробую показать на картинке, где шанс выбить шмотку будет виден нагляднее.

А почему, спросите вы? Потому-что человек, который писал первую версию фришного сервера, был далекий от игровой механики, и до ума не довел. А те кто открывают сервера по сей день, покупают “корявые” сборки у “криворуких” разработчиков. Вот так вот.
Нынешние разработчики не могут сделать систему взвешенного выбора) - random weighted selection
Пример кода для java
Java:
Please,
Вход
or
Регистрация to view codes content!
Спасибо за внимание!)