Начнем с того, как же на самом деле работает система наград (дропа) в L2.
Когда моб умирает, сервер делает две вещи:
〰️ раздаёт экспу/сп за урон
〰️ затем для каждого типа награды (обычный лут, адена, спойл) запускает бросок:
RewardList.roll(player, mod, isRaid).
Дальше всё решают группы дропа.
Внутри моба лут разбит на группы (RewardGroup).
У каждой группы есть:
〰️ шанс сработать (из шкалы 1 000 000, это как 〰️ проценты ×10 000),
〰️ список предметов с их шансами внутри группы.
Алгоритм:
1. Кидаем группу: попали — крутим один предмет из списка этой группы.
2. Если общие рейты высокие, группу можно кинуть несколько раз (про "мультидроп" поговорим отдельно).
Это ровно та система, благодаря которой с одного моба может выпасть либо А, либо B — но не всё сразу.
Откуда берутся "рейты"?
Перед броском сервер считает итоговый множитель rate (для обычных предметов):
rate = (Config.RATE_DROP_ITEMS + бонус rune/premium игрока)
× персональный множитель игрока
× mod
Где:
🔄 Config.RATE_DROP_ITEMS — ваши базовые рейты сервера,
🔄 player.getVitalityBonus() — бонус от виталки,
🔄 player.getRateItems() — перс. множитель (премиум/баффы),
🔄 mod — самое интересное: сюда как раз попадает штраф за разницу уровней и прочие модификаторы.
Если rate = 2.7, сервер делает 2 полных броска группы + ещё один с вероятностью 0.7. Это и есть аккуратный "мультидроп".
Для адены используется отдельная логика насыщения, чтобы не спамить сотней бросков: при очень больших модах шанс "дожимают" вплоть до 100%, а количество масштабируют.
Вот так, когда хотелось написать только о штрафах по уровню на дроп в процессе разбора логики всплывает еще много чего интересного. Точно, эта тема будет разбита на несколько постов. Хочется сделать ее очень насыщенной.
Мы так же поговорим о EXP/SP, как влияет кол-во нанесенного урона на дроп/EXP/SP и много чего еще интересного) оставайтесь с нами друзья! Мы только начали ☕️