Гадание Таро (LuckyGame)

grin362831

Путник
Участник
Сообщения
57
Розыгрыши
0
Репутация
0
Реакции
1
Баллы
31
Хроники
  1. Master Class
Исходники
Присутствуют
Сборка
L2JMobius
Доброго времени суток всем. Помогите пожалуйста разобраться. Почему несмотря на заполненную таблицу с итемами и шансом их выпадения в текущем варианте настроек в мини игре в качестве обычных наград выпадает только 2 итема (самоцвет, кристалл красок), а улучшенная награда просто выдается каждый итем по очереди снизу вверх. Как правильно настроить, чтоб и обычную награду и улучшенную выдавало согласно выставленному шансу в файле.
Код:
<?xml version="1.0" encoding="UTF-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/LuckyGameData.xsd">
    <luckygame index="2" turning_point="50000">
        <common_reward>
            <item id="48906" count="1" chance="0.2" /> <!-- Кристалл души шилен Ур.8 -->
            <item id="29247" count="1" chance="0.3" /> <!-- Коробка с плащем Фериоса +7 -->
            <item id="29246" count="1" chance="0.3" /> <!-- Коробка с плащем Эльмора +7 -->
            <item id="29245" count="1" chance="0.3" /> <!-- Коробка с плащем Адена +7 -->
            <item id="29244" count="1" chance="0.3" /> <!-- Коробка с плащем Эльморадена +7 -->
            <item id="29877" count="1" chance="0.5" /> <!-- Большой ларец Ур.5 -->
            <item id="60475" count="1" chance="1.0" /> <!-- Кристалл силы -->
            <item id="60474" count="1" chance="1.0" /> <!-- Кристалл стража -->
            <item id="29163" count="1" chance="1.0" /> <!-- Стабильный свиток: модифицировать плащ -->
            <item id="39649" count="1" chance="1.0" /> <!-- Талисман Бенира Ур.16 -->
            <item id="47916" count="1" chance="2.0" /> <!-- Сундук с плащем света невит (30 д.) -->
            <item id="29878" count="1" chance="2.0" /> <!-- Большой ларец Ур.1 -->
            <item id="29539" count="1" chance="5.0" /> <!-- Темный кристалл -->
            <item id="35649" count="1" chance="5.0" /> <!-- Запечатанный талисман вожделения -->
            <item id="28602" count="1" chance="5.0" /> <!-- Сундук с камнем зачарования для плаща -->
            <item id="80130" count="1" chance="5.0" /> <!-- Камень Зачарования Исключительного Качества для Оружия -->
            <item id="28596" count="1" chance="5.0" /> <!-- Легендарный свиток -->
            <item id="29379" count="1" chance="8.0" /> <!-- Фиолетовое зелье фибса -->
            <item id="80000" count="1" chance="8.0" /> <!-- Осколок артефакта -->
            <item id="40236" count="1" chance="8.0" /> <!-- Сундук с силой гигантов (100 шт) -->
            <item id="45932" count="1" chance="8.0" /> <!-- Камень Зачарования Высшего Качества для Оружия -->
            <item id="47494" count="1" chance="8.0" /> <!-- Селенит -->
            <item id="48678" count="1" chance="10.0" /> <!-- Сундук с Талисманом Атаки Стихией Высокого КачестваСила Крит. Атк. для обычных атак -->
            <item id="48679" count="1" chance="10.0" /> <!-- Сундук с Талисманом Времени Перезарядки Умений Высокого КачестваФиз. Защ./ Маг. Защ. -->
            <item id="48677" count="1" chance="10.0" /> <!-- Сундук с Талисманом Мощности Умений Высокого КачестваСила Крит. Атк. умений -->
            <item id="48910" count="1" chance="10.0" /> <!-- Коробка с кристаллом души шилен -->
            <item id="40235" count="1" chance="20.0" /> <!-- Сундук с силой гигантов (20 шт) -->
            <item id="47951" count="5" chance="30.0" /> <!-- Кристалл боевого духа -->
            <item id="80964" count="1" chance="40.0" /> <!-- Энергия Защиты -->
            <item id="48831" count="1" chance="40.0" /> <!-- Энергия самоцвета -->
        </common_reward>
    </luckygame>
    <luckygame index="102" turning_point="10000">
        <common_reward>
            <item id="19440" count="50" chance="50.0" /> <!-- Самоцвет -->
            <item id="81134" count="1" chance="50.0" /> <!-- Кристалл Красок -->
            <item id="36386" count="1" chance="50.0" /> <!-- Свиток гигантов: модифицировать оружие ранга R -->
            <item id="19447" count="1" chance="50.0" /> <!-- Благословенный свиток: модифицировать оружие ранга R -->
            <item id="29835" count="3" chance="50.0" /> <!-- Ларец Удачи Ур.1 -->
            <item id="48876" count="1" chance="50.0" /> <!-- Книга забытой силы глава 1 -->
            <item id="82346" count="5" chance="50.0" /> <!-- Сказания эйнхасад -->
            <item id="47952" count="5" chance="50.0" /> <!-- Кристалл защиты -->
            <item id="47817" count="2" chance="50.0" /> <!-- Сундук с талисманом сайхи -->
            <item id="29890" count="1" chance="50.0" /> <!-- Эфирный набор -->
        </common_reward>
        <unique_reward>
            <item id="80663" count="1" points="10000" /> <!-- Коробка с оружием дракона Ур.2 -->
            <item id="29753" count="1" points="9500" /> <!-- Сияние наследника Ур 4 ПВЕ -->
            <item id="29757" count="1" points="9000" /> <!-- Сияние наследника Ур 4 ПВП -->
            <item id="46484" count="1" points="8500" /> <!-- Кристалл души Леоны     Ур.11 -->
            <item id="46469" count="1" points="8000" /> <!-- Кристалл души Мермедена Ур.11 -->
            <item id="46454" count="1" points="7500" /> <!-- Кристалл души кайна Ур.11 -->
            <item id="46499" count="1" points="7000" /> <!-- Кристалл души пантеона Ур.11 -->
            <item id="46514" count="1" points="6500" /> <!-- Кристалл души леонелла Ур.11 -->
            <item id="82085" count="1" points="6000" /> <!-- Талисман души -->
            <item id="81453" count="1" points="5500" /> <!-- Улучшенный камень рун -->
            <item id="36414" count="1" points="5000" /> <!-- Коготь дракона -->
            <item id="29908" count="1" points="4500" /> <!-- Запечатанный Сундук с Кровожадным Оружием Зарича -->
            <item id="29913" count="1" points="4000" /> <!-- Запечатанный Сундук с Кровожадным Оружием Акаманаха -->
            <item id="28608" count="1" points="3500" /> <!-- Коробка с Легендарным Плащом Фериоса +10 -->
            <item id="28607" count="1" points="3000" /> <!-- Коробка с Легендарным Плащом Эльмора +10 -->
            <item id="28606" count="1" points="2500" /> <!-- Коробка с Легендарным Плащом Адена +10 -->
            <item id="28605" count="1" points="2000" /> <!-- Коробка с Легендарным Плащом Эльморадена +10 -->
            <item id="80957" count="1" points="1500" /> <!-- Небесный талисман -->
            <item id="80959" count="1" points="1000" /> <!-- Эпический талисман -->
            <item id="19464" count="1" points="950" /> <!-- Благословенное ожерелье валакаса -->
            <item id="19463" count="1" points="900" /> <!-- Благословенная серьга антараса -->
            <item id="36946" count="1" points="850" /> <!-- Серьга линдвиора -->
            <item id="80333" count="1" points="800" /> <!-- Ожерелье дракона -->
            <item id="80334" count="1" points="750" /> <!-- Серьга дракона -->
            <item id="80335" count="1" points="700" /> <!-- Кольцо дракона -->
            <item id="48984" count="1" points="650" /> <!-- Артефакт мощность маг. умений -->
            <item id="82194" count="1" points="600" /> <!-- Артефакт физ/маг защ -->
            <item id="82192" count="1" points="550" /> <!-- Артефакт мощность обычн. атак -->
            <item id="48983" count="1" points="500" /> <!-- Артефакт мощность физ. умений -->
            <item id="82049" count="1" points="450" /> <!-- Сверкающая энергия сайхи -->
            <item id="29164" count="1" points="400" /> <!-- Легендарный Свиток (высокий уровень) -->
            <item id="81938" count="1" points="350" /> <!-- Священная Книга Развития Улучшенного Звездного Агатиона -->
            <item id="29823" count="1" points="300" /> <!-- Стабильный Свиток Высокого Качества: Модифицировать Легендарный Плащ -->
            <item id="28766" count="1" points="250" /> <!-- Стабильный Свиток: Модифицировать Легендарный Плащ -->
            <item id="47218" count="1" points="200" /> <!-- Кольцо искателя истины -->
            <item id="47216" count="1" points="150" /> <!-- Кольцо властного правителя -->
            <item id="80931" count="1" points="100" /> <!-- Куб улучшенного звездного агатиона -->
            <item id="80901" count="1" points="50" /> <!-- Кровь зарича -->
            <item id="82032" count="1" points="45" /> <!-- Сверкающая энергия самоцвета -->
            <item id="81770" count="1" points="40" /> <!-- Сверкающая энергия защиты -->
            <item id="29170" count="1" points="35" /> <!-- Сундук с камнем зачарования высокого качества для плаща -->
            <item id="80932" count="1" points="30" /> <!-- Книга развития улучшенного звездного агатиона -->
            <item id="48876" count="5" points="25" /> <!-- Книга забытой силы глава 1 -->
            <item id="48323" count="1" points="20" /> <!-- Божественная книга развития звездного агатиона -->
            <item id="80636" count="5" points="15" /> <!-- Кристалл Артефакта -->
            <item id="48831" count="15" points="10" /> <!-- Энергия Самоцвета -->
            <item id="82378" count="1" points="5" /> <!-- Сверкающие сказания эйнхасад -->
        </unique_reward>
        <modify_reward min_game="40" max_game="50">
            <item id="40235" count="1" chance="20.0" /> <!-- Сундук с силой гигантов (20 шт) -->
            <item id="47951" count="5" chance="30.0" /> <!-- Кристалл боевого духа -->
            <item id="80964" count="1" chance="40.0" /> <!-- Энергия Защиты -->
            <item id="48831" count="1" chance="40.0" /> <!-- Энергия самоцвета -->
        </modify_reward>
    </luckygame>
</list>
 
Сумма шансов всех предметов в группах наград common_reward и modify_reward по идее должна быть равна 100%
По идее у тебя уже при парсе данных из хмлки должно было бы материться в консоль/лог о том что сумма шансов не равна 100%.
Разве что вобще это не проверяется у мобиуса.

ну а почему такое поведение с unique_reward - тут уж хз без изучения кода обработки оных наград.
 
Сумма шансов всех предметов в группах наград common_reward и modify_reward по идее должна быть равна 100%
По идее у тебя уже при парсе данных из хмлки должно было бы материться в консоль/лог о том что сумма шансов не равна 100%.
Разве что вобще это не проверяется у мобиуса.

ну а почему такое поведение с unique_reward - тут уж хз без изучения кода обработки оных наград.
Консоль никаких ошибок не выдаёт, но попробую шанс раскидать. Странно что выдает именно 2 итема и ничего кроме них.
 
Ни чего странного у тебя на 3 итемах шансы уже ломаются
 
там, на самом деле, даже если выставить общую сумму 100%, нихера не пашет как надо)
 
Консоль никаких ошибок не выдаёт, но попробую шанс раскидать. Странно что выдает именно 2 итема и ничего кроме них.
вобще стоит прикрутить в парсер проверку суммарного шанса, чтобы матюкалось при общем шансе не равном 100% в консоль, типа как-то так :)
потому как перекосы что в одну что в другую сторону чреваты:
- если будет больше 100%, то будет вот как у тебя случилось.
- если меньше, то или будет шанс вобще не получить при игре или же вобще посыплются эксерпшны.

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

З.Ы. вобще у мобиуса вроде много где не проверяются как надо суммарные шансы, что вполне может приводить к неочевидным проблемам...
я лично у себя все и вся стараюсь проверять в распарсиваемых данных, так сказать делаю по возможности максимально параноидальную "защиту от дурака" :)
 
Java:
            final double chance = 100 * Rnd.nextDouble();
            double totalChance = 0;
            for (ItemChanceHolder item : holder.getCommonReward())
            {
                totalChance += item.getChance();
                if (totalChance >= chance)
                {
                    rewards.computeIfAbsent(LuckyGameItemType.COMMON, k -> new ArrayList<>()).add(item);
                    break;
                }
            }
ну а шо, каждый старт - рандом ))
 
Java:
            final double chance = 100 * Rnd.nextDouble();
            double totalChance = 0;
            for (ItemChanceHolder item : holder.getCommonReward())
            {
                totalChance += item.getChance();
                if (totalChance >= chance)
                {
                    rewards.computeIfAbsent(LuckyGameItemType.COMMON, k -> new ArrayList<>()).add(item);
                    break;
                }
            }
ну а шо, каждый старт - рандом ))
Ну по офу оно вроде так и должно работать, у мобиусов просто почему-то награды выдаются как в батл пассе с увеличением полученных поинт очков.
 
Ну по офу оно вроде так и должно работать, у мобиусов просто почему-то награды выдаются как в батл пассе с увеличением полученных поинт очков.
1. На офе за каждые крутки - начисляются очки.
Есть 2 шкалы начисления - локальная и серверная.
В зависимости от значения шкалы - выдаются дополнительные награды.
2. У мобиуса шансы в .xml далеко выходят за 100%, а из-за того, что при парсинге все ноды перемешиваются (нода - это предмет, в котором указано колличество и шанс) - каждый запуск сервера будет давать разные одинаковые результаты.
* Разные одинаковые результаты - из-за того что шансы ограничены 100%, а при запуске сервера предметы перемешиваются - каждый запуск будет разная сортировка предметов, но при попытке получить Н-ое колличество предметов в игре - они будут примерно одинаковые;

Короче - сведите все шансы к 100%, а на поинты забейте.
 
Вообщем вот - подбил сумму процентов так как я это вижу. Дроп набирал с оф. источника. Потестил, результат меня вполне устраивает по обычным наградам. Держите может кому пригодиться. Уникальные награды, даже после нескольких перезапусков выдаются по порядку снизу вверх (что меня не устраивает) буду ковырять дальше.
Код:
<?xml version="1.0" encoding="UTF-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/LuckyGameData.xsd">
    <luckygame index="2" turning_point="50000">
        <common_reward>
             <item id="48906" count="1" chance="0.01" /> <!-- Кристалл души шилен Ур.8 -->
            <item id="29247" count="1" chance="0.02" /> <!-- Коробка с плащем Фериоса +7 -->
            <item id="29246" count="1" chance="0.02" /> <!-- Коробка с плащем Эльмора +7 -->
            <item id="29245" count="1" chance="0.02" /> <!-- Коробка с плащем Адена +7 -->
            <item id="29244" count="1" chance="0.02" /> <!-- Коробка с плащем Эльморадена +7 -->
            <item id="29877" count="1" chance="0.03" /> <!-- Большой ларец Ур.5 -->
            <item id="60475" count="1" chance="0.03" /> <!-- Кристалл силы -->
            <item id="60474" count="1" chance="0.05" /> <!-- Кристалл стража -->
            <item id="29163" count="1" chance="0.1" /> <!-- Стабильный свиток: модифицировать плащ -->
            <item id="39649" count="1" chance="0.1" /> <!-- Талисман Бенира Ур.16 -->
            <item id="47916" count="1" chance="0.2" /> <!-- Сундук с плащем света невит (30 д.) -->
            <item id="29878" count="1" chance="0.2" /> <!-- Большой ларец Ур.1 -->
            <item id="29539" count="1" chance="0.2" /> <!-- Темный кристалл --> 
            <item id="35649" count="1" chance="0.3" /> <!-- Запечатанный талисман вожделения -->
            <item id="28602" count="1" chance="0.3" /> <!-- Сундук с камнем зачарования для плаща -->
            <item id="80130" count="1" chance="0.3" /> <!-- Камень Зачарования Исключительного Качества для Оружия -->
            <item id="28596" count="1" chance="0.3" /> <!-- Легендарный свиток --> 
            <item id="29379" count="1" chance="0.5" /> <!-- Фиолетовое зелье фибса -->
            <item id="80000" count="1" chance="0.5" /> <!-- Осколок артефакта -->
            <item id="40236" count="1" chance="0.5" /> <!-- Сундук с силой гигантов (100 шт) --> 
            <item id="45932" count="1" chance="0.5" /> <!-- Камень Зачарования Высшего Качества для Оружия --> 
            <item id="47494" count="1" chance="0.8" /> <!-- Селенит --> 
            <item id="48678" count="1" chance="0.8" /> <!-- Сундук с Талисманом Атаки Стихией Высокого КачестваСила Крит. Атк. для обычных атак -->
            <item id="48679" count="1" chance="0.8" /> <!-- Сундук с Талисманом Времени Перезарядки Умений Высокого КачестваФиз. Защ./ Маг. Защ. --> 
            <item id="48677" count="1" chance="0.8" /> <!-- Сундук с Талисманом Мощности Умений Высокого КачестваСила Крит. Атк. умений -->
            <item id="48910" count="1" chance="0.8" /> <!-- Коробка с кристаллом души шилен --> 
            <item id="40235" count="1" chance="0.8" /> <!-- Сундук с силой гигантов (20 шт) --> 
            <item id="47951" count="5" chance="1.0" /> <!-- Кристалл боевого духа --> 
            <item id="80964" count="1" chance="2.0" /> <!-- Энергия Защиты -->
            <item id="48831" count="1" chance="2.0" /> <!-- Энергия самоцвета -->
            <item id="19440" count="50" chance="5.0" /> <!-- Самоцвет --> 
            <item id="81134" count="1" chance="6.0" /> <!-- Кристалл Красок -->
            <item id="36386" count="1" chance="6.0" /> <!-- Свиток гигантов: модифицировать оружие ранга R -->
            <item id="19447" count="1" chance="6.0" /> <!-- Благословенный свиток: модифицировать оружие ранга R -->
            <item id="29835" count="3" chance="6.0" /> <!-- Ларец Удачи Ур.1 --> 
            <item id="48876" count="1" chance="6.0" /> <!-- Книга забытой силы глава 1 --> 
            <item id="82346" count="5" chance="10.0" /> <!-- Сказания эйнхасад -->
            <item id="47952" count="5" chance="10.0" /> <!-- Кристалл защиты -->
            <item id="47817" count="2" chance="10.0" /> <!-- Сундук с талисманом сайхи -->
            <item id="29890" count="1" chance="20.0" /> <!-- Эфирный набор -->
        </common_reward>
    </luckygame>
    <luckygame index="102" turning_point="10000">
        <common_reward>
            <item id="48906" count="1" chance="0.01" /> <!-- Кристалл души шилен Ур.8 -->
            <item id="29247" count="1" chance="0.02" /> <!-- Коробка с плащем Фериоса +7 -->
            <item id="29246" count="1" chance="0.02" /> <!-- Коробка с плащем Эльмора +7 -->
            <item id="29245" count="1" chance="0.02" /> <!-- Коробка с плащем Адена +7 -->
            <item id="29244" count="1" chance="0.02" /> <!-- Коробка с плащем Эльморадена +7 -->
            <item id="29877" count="1" chance="0.03" /> <!-- Большой ларец Ур.5 -->
            <item id="60475" count="1" chance="0.03" /> <!-- Кристалл силы -->
            <item id="60474" count="1" chance="0.05" /> <!-- Кристалл стража -->
            <item id="29163" count="1" chance="0.1" /> <!-- Стабильный свиток: модифицировать плащ -->
            <item id="39649" count="1" chance="0.1" /> <!-- Талисман Бенира Ур.16 -->
            <item id="47916" count="1" chance="0.2" /> <!-- Сундук с плащем света невит (30 д.) -->
            <item id="29878" count="1" chance="0.2" /> <!-- Большой ларец Ур.1 -->
            <item id="29539" count="1" chance="0.2" /> <!-- Темный кристалл --> 
            <item id="35649" count="1" chance="0.3" /> <!-- Запечатанный талисман вожделения -->
            <item id="28602" count="1" chance="0.3" /> <!-- Сундук с камнем зачарования для плаща -->
            <item id="80130" count="1" chance="0.3" /> <!-- Камень Зачарования Исключительного Качества для Оружия -->
            <item id="28596" count="1" chance="0.3" /> <!-- Легендарный свиток --> 
            <item id="29379" count="1" chance="0.5" /> <!-- Фиолетовое зелье фибса -->
            <item id="80000" count="1" chance="0.5" /> <!-- Осколок артефакта -->
            <item id="40236" count="1" chance="0.5" /> <!-- Сундук с силой гигантов (100 шт) --> 
            <item id="45932" count="1" chance="0.5" /> <!-- Камень Зачарования Высшего Качества для Оружия --> 
            <item id="47494" count="1" chance="0.8" /> <!-- Селенит --> 
            <item id="48678" count="1" chance="0.8" /> <!-- Сундук с Талисманом Атаки Стихией Высокого КачестваСила Крит. Атк. для обычных атак -->
            <item id="48679" count="1" chance="0.8" /> <!-- Сундук с Талисманом Времени Перезарядки Умений Высокого КачестваФиз. Защ./ Маг. Защ. --> 
            <item id="48677" count="1" chance="0.8" /> <!-- Сундук с Талисманом Мощности Умений Высокого КачестваСила Крит. Атк. умений -->
            <item id="48910" count="1" chance="0.8" /> <!-- Коробка с кристаллом души шилен --> 
            <item id="40235" count="1" chance="0.8" /> <!-- Сундук с силой гигантов (20 шт) --> 
            <item id="47951" count="5" chance="1.0" /> <!-- Кристалл боевого духа --> 
            <item id="80964" count="1" chance="2.0" /> <!-- Энергия Защиты -->
            <item id="48831" count="1" chance="2.0" /> <!-- Энергия самоцвета -->
            <item id="19440" count="50" chance="5.0" /> <!-- Самоцвет --> 
            <item id="81134" count="1" chance="6.0" /> <!-- Кристалл Красок -->
            <item id="36386" count="1" chance="6.0" /> <!-- Свиток гигантов: модифицировать оружие ранга R -->
            <item id="19447" count="1" chance="6.0" /> <!-- Благословенный свиток: модифицировать оружие ранга R -->
            <item id="29835" count="3" chance="6.0" /> <!-- Ларец Удачи Ур.1 --> 
            <item id="48876" count="1" chance="6.0" /> <!-- Книга забытой силы глава 1 --> 
            <item id="82346" count="5" chance="10.0" /> <!-- Сказания эйнхасад -->
            <item id="47952" count="5" chance="10.0" /> <!-- Кристалл защиты -->
            <item id="47817" count="2" chance="10.0" /> <!-- Сундук с талисманом сайхи -->
            <item id="29890" count="1" chance="20.0" /> <!-- Эфирный набор -->
        </common_reward>
        <unique_reward>
            <item id="80663" count="1" points="10000" /> <!-- Коробка с оружием дракона Ур.2 -->
            <item id="29753" count="1" points="9500" /> <!-- Сияние наследника Ур 4 ПВЕ -->
            <item id="29757" count="1" points="9000" /> <!-- Сияние наследника Ур 4 ПВП -->
            <item id="46484" count="1" points="8500" /> <!-- Кристалл души Леоны     Ур.11 -->
            <item id="46469" count="1" points="8000" /> <!-- Кристалл души Мермедена Ур.11 -->
            <item id="46454" count="1" points="7500" /> <!-- Кристалл души кайна Ур.11 -->
            <item id="46499" count="1" points="7000" /> <!-- Кристалл души пантеона Ур.11 -->
            <item id="46514" count="1" points="6500" /> <!-- Кристалл души леонелла Ур.11 -->
            <item id="82085" count="1" points="6000" /> <!-- Талисман души -->
            <item id="81453" count="1" points="5500" /> <!-- Улучшенный камень рун -->
            <item id="36414" count="1" points="5000" /> <!-- Коготь дракона -->
            <item id="29908" count="1" points="4500" /> <!-- Запечатанный Сундук с Кровожадным Оружием Зарича -->
            <item id="29913" count="1" points="4000" /> <!-- Запечатанный Сундук с Кровожадным Оружием Акаманаха -->
            <item id="28608" count="1" points="3500" /> <!-- Коробка с Легендарным Плащом Фериоса +10 -->
            <item id="28607" count="1" points="3000" /> <!-- Коробка с Легендарным Плащом Эльмора +10 -->
            <item id="28606" count="1" points="2500" /> <!-- Коробка с Легендарным Плащом Адена +10 -->
            <item id="28605" count="1" points="2000" /> <!-- Коробка с Легендарным Плащом Эльморадена +10 -->
            <item id="80957" count="1" points="1500" /> <!-- Небесный талисман -->
            <item id="80959" count="1" points="1000" /> <!-- Эпический талисман -->
            <item id="19464" count="1" points="950" /> <!-- Благословенное ожерелье валакаса -->
            <item id="19463" count="1" points="900" /> <!-- Благословенная серьга антараса -->
            <item id="36946" count="1" points="850" /> <!-- Серьга линдвиора -->
            <item id="80333" count="1" points="800" /> <!-- Ожерелье дракона -->
            <item id="80334" count="1" points="750" /> <!-- Серьга дракона -->
            <item id="80335" count="1" points="700" /> <!-- Кольцо дракона -->
            <item id="48984" count="1" points="650" /> <!-- Артефакт мощность маг. умений -->
            <item id="82194" count="1" points="600" /> <!-- Артефакт физ/маг защ -->
            <item id="82192" count="1" points="550" /> <!-- Артефакт мощность обычн. атак -->
            <item id="48983" count="1" points="500" /> <!-- Артефакт мощность физ. умений -->
            <item id="82049" count="1" points="450" /> <!-- Сверкающая энергия сайхи -->
            <item id="29164" count="1" points="400" /> <!-- Легендарный Свиток (высокий уровень) -->
            <item id="81938" count="1" points="350" /> <!-- Священная Книга Развития Улучшенного Звездного Агатиона -->
            <item id="29823" count="1" points="300" /> <!-- Стабильный Свиток Высокого Качества: Модифицировать Легендарный Плащ -->
            <item id="28766" count="1" points="250" /> <!-- Стабильный Свиток: Модифицировать Легендарный Плащ -->
            <item id="47218" count="1" points="200" /> <!-- Кольцо искателя истины -->
            <item id="47216" count="1" points="150" /> <!-- Кольцо властного правителя -->
            <item id="80931" count="1" points="100" /> <!-- Куб улучшенного звездного агатиона -->
            <item id="80901" count="1" points="50" /> <!-- Кровь зарича -->
            <item id="82032" count="1" points="45" /> <!-- Сверкающая энергия самоцвета -->
            <item id="81770" count="1" points="40" /> <!-- Сверкающая энергия защиты -->
            <item id="29170" count="1" points="35" /> <!-- Сундук с камнем зачарования высокого качества для плаща -->
            <item id="80932" count="1" points="30" /> <!-- Книга развития улучшенного звездного агатиона -->
            <item id="48876" count="5" points="25" /> <!-- Книга забытой силы глава 1 -->
            <item id="48323" count="1" points="20" /> <!-- Божественная книга развития звездного агатиона -->
            <item id="80636" count="5" points="15" /> <!-- Кристалл Артефакта -->
            <item id="48831" count="15" points="10" /> <!-- Энергия Самоцвета -->
            <item id="82378" count="1" points="5" /> <!-- Сверкающие сказания эйнхасад -->
        </unique_reward>
        <modify_reward min_game="40" max_game="50">
            <item id="48906" count="1" chance="0.01" /> <!-- Кристалл души шилен Ур.8 -->
            <item id="29247" count="1" chance="0.02" /> <!-- Коробка с плащем Фериоса +7 -->
            <item id="29246" count="1" chance="0.02" /> <!-- Коробка с плащем Эльмора +7 -->
            <item id="29245" count="1" chance="0.02" /> <!-- Коробка с плащем Адена +7 -->
            <item id="29244" count="1" chance="0.02" /> <!-- Коробка с плащем Эльморадена +7 --> 
            <item id="29877" count="1" chance="0.03" /> <!-- Большой ларец Ур.5 -->
            <item id="60475" count="1" chance="0.03" /> <!-- Кристалл силы --> 
            <item id="60474" count="1" chance="0.05" /> <!-- Кристалл стража --> 
            <item id="29163" count="1" chance="0.1" /> <!-- Стабильный свиток: модифицировать плащ -->
            <item id="39649" count="1" chance="0.1" /> <!-- Талисман Бенира Ур.16 -->
            <item id="47916" count="1" chance="0.2" /> <!-- Сундук с плащем света невит (30 д.) -->
            <item id="29878" count="1" chance="0.2" /> <!-- Большой ларец Ур.1 -->
            <item id="29539" count="1" chance="0.2" /> <!-- Темный кристалл --> 
            <item id="35649" count="1" chance="0.3" /> <!-- Запечатанный талисман вожделения -->
            <item id="28602" count="1" chance="0.3" /> <!-- Сундук с камнем зачарования для плаща -->
            <item id="80130" count="1" chance="0.3" /> <!-- Камень Зачарования Исключительного Качества для Оружия -->
            <item id="28596" count="1" chance="0.3" /> <!-- Легендарный свиток --> 
            <item id="29379" count="1" chance="0.5" /> <!-- Фиолетовое зелье фибса -->
            <item id="80000" count="1" chance="0.5" /> <!-- Осколок артефакта -->
            <item id="40236" count="1" chance="0.5" /> <!-- Сундук с силой гигантов (100 шт) --> 
            <item id="45932" count="1" chance="0.5" /> <!-- Камень Зачарования Высшего Качества для Оружия --> 
            <item id="47494" count="1" chance="0.8" /> <!-- Селенит --> 5
            <item id="48678" count="1" chance="1.0" /> <!-- Сундук с Талисманом Атаки Стихией Высокого КачестваСила Крит. Атк. для обычных атак -->
            <item id="48679" count="1" chance="1.0" /> <!-- Сундук с Талисманом Времени Перезарядки Умений Высокого КачестваФиз. Защ./ Маг. Защ. --> 
            <item id="48677" count="1" chance="1.0" /> <!-- Сундук с Талисманом Мощности Умений Высокого КачестваСила Крит. Атк. умений -->
            <item id="48910" count="1" chance="2.0" /> <!-- Коробка с кристаллом души шилен --> 
            <item id="40235" count="1" chance="5.0" /> <!-- Сундук с силой гигантов (20 шт) --> 
            <item id="47951" count="5" chance="5.0" /> <!-- Кристалл боевого духа --> 
            <item id="80964" count="1" chance="10.0" /> <!-- Энергия Защиты -->
            <item id="48831" count="1" chance="10.0" /> <!-- Энергия самоцвета --> 
            <item id="19440" count="50" chance="15.0" /> <!-- Самоцвет --> 
            <item id="81134" count="1" chance="15.0" /> <!-- Кристалл Красок --> 
            <item id="36386" count="1" chance="15.0" /> <!-- Свиток гигантов: модифицировать оружие ранга R -->
            <item id="19447" count="1" chance="15.0" /> <!-- Благословенный свиток: модифицировать оружие ранга R -->
        </modify_reward>
    </luckygame>
</list>

MrKirill1232, подскажи можно ли сделать тут так чтоб уникальные награды выдавались случайно в зависимости от количества поинт очков, к примеру чем больше значение поинт очков в списке тем реже выпадает награда, ну или наоборот (не принципиально).
Код:
public class RequestLuckyGamePlay extends ClientPacket
{
    private static final int FORTUNE_READING_TICKET = 23767;
    private static final int LUXURY_FORTUNE_READING_TICKET = 23768;
    private LuckyGameType _type;
    private int _reading;
    
    @Override
    protected void readImpl()
    {
        final int type = MathUtil.clamp(readInt(), 0, LuckyGameType.values().length);
        _type = LuckyGameType.values()[type];
        _reading = MathUtil.clamp(readInt(), 0, 50); // max play is 50
    }
    
    @Override
    protected void runImpl()
    {
        final Player player = getPlayer();
        if (player == null)
        {
            return;
        }
        
        final int index = _type == LuckyGameType.LUXURY ? 102 : 2; // move to event config
        final LuckyGameDataHolder holder = LuckyGameData.getInstance().getLuckyGameDataByIndex(index);
        if (holder == null)
        {
            return;
        }
        
        final long tickets = _type == LuckyGameType.LUXURY ? player.getInventory().getInventoryItemCount(LUXURY_FORTUNE_READING_TICKET, -1) : player.getInventory().getInventoryItemCount(FORTUNE_READING_TICKET, -1);
        if (tickets < _reading)
        {
            player.sendPacket(SystemMessageId.NOT_ENOUGH_TICKETS);
            player.sendPacket(_type == LuckyGameType.LUXURY ? ExBettingLuckyGameResult.LUXURY_INVALID_ITEM_COUNT : ExBettingLuckyGameResult.NORMAL_INVALID_ITEM_COUNT);
            return;
        }
        
        int playCount = player.getVariables().getInt(PlayerVariables.FORTUNE_TELLING_VARIABLE, 0);
        boolean blackCat = player.getVariables().getBoolean(PlayerVariables.FORTUNE_TELLING_BLACK_CAT_VARIABLE, false);
        final EnumMap<LuckyGameItemType, List<ItemHolder>> rewards = new EnumMap<>(LuckyGameItemType.class);
        for (int i = 0; i < _reading; i++)
        {
            final double chance = 100 * Rnd.nextDouble();
            double totalChance = 0;
            for (ItemChanceHolder item : holder.getCommonReward())
            {
                totalChance += item.getChance();
                if (totalChance >= chance)
                {
                    rewards.computeIfAbsent(LuckyGameItemType.COMMON, _ -> new ArrayList<>()).add(item);
                    break;
                }
            }
            playCount++;
            if ((playCount >= holder.getMinModifyRewardGame()) && (playCount <= holder.getMaxModifyRewardGame()) && !blackCat)
            {
                final List<ItemChanceHolder> modifyReward = holder.getModifyReward();
                final double chanceModify = 100 * Rnd.nextDouble();
                totalChance = 0;
                for (ItemChanceHolder item : modifyReward)
                {
                    totalChance += item.getChance();
                    if (totalChance >= chanceModify)
                    {
                        rewards.computeIfAbsent(LuckyGameItemType.RARE, _ -> new ArrayList<>()).add(item);
                        blackCat = true;
                        break;
                    }
                }
                
                if (playCount == holder.getMaxModifyRewardGame())
                {
                    rewards.computeIfAbsent(LuckyGameItemType.RARE, _ -> new ArrayList<>()).add(modifyReward.get(Rnd.get(modifyReward.size())));
                    blackCat = true;
                }
            }
        }
        
        final int totalWeight = rewards.values().stream().mapToInt(list -> list.stream().mapToInt(item -> ItemData.getInstance().getTemplate(item.getId()).getWeight()).sum()).sum();
        
        // Check inventory capacity
        if (!rewards.isEmpty() && (!player.getInventory().validateCapacity(rewards.size()) || !player.getInventory().validateWeight(totalWeight)))
        {
            player.sendPacket(_type == LuckyGameType.LUXURY ? ExBettingLuckyGameResult.LUXURY_INVALID_CAPACITY : ExBettingLuckyGameResult.NORMAL_INVALID_CAPACITY);
            player.sendPacket(SystemMessageId.YOUR_INVENTORY_IS_EITHER_FULL_OR_OVERWEIGHT);
            return;
        }
        
        if (!player.destroyItemByItemId(ItemProcessType.FEE, _type == LuckyGameType.LUXURY ? LUXURY_FORTUNE_READING_TICKET : FORTUNE_READING_TICKET, _reading, player, true))
        {
            player.sendPacket(_type == LuckyGameType.LUXURY ? ExBettingLuckyGameResult.LUXURY_INVALID_ITEM_COUNT : ExBettingLuckyGameResult.NORMAL_INVALID_ITEM_COUNT);
            return;
        }
        
        for (int i = 0; i < _reading; i++)
        {
            final int serverGameNumber = LuckyGameData.getInstance().increaseGame();
            holder.getUniqueReward().stream().filter(reward -> reward.getPoints() == serverGameNumber).forEach(item -> rewards.computeIfAbsent(LuckyGameItemType.UNIQUE, _ -> new ArrayList<>()).add(item));
        }
        
        player.sendPacket(new ExBettingLuckyGameResult(LuckyGameResultType.SUCCESS, _type, rewards, (int) (_type == LuckyGameType.LUXURY ? player.getInventory().getInventoryItemCount(LUXURY_FORTUNE_READING_TICKET, -1) : player.getInventory().getInventoryItemCount(FORTUNE_READING_TICKET, -1))));
        
        for (Entry<LuckyGameItemType, List<ItemHolder>> reward : rewards.entrySet())
        {
            for (ItemHolder r : reward.getValue())
            {
                final Item item = player.addItem(ItemProcessType.REWARD, r.getId(), r.getCount(), player, true);
                if (reward.getKey() == LuckyGameItemType.UNIQUE)
                {
                    final SystemMessage sm = new SystemMessage(_type == LuckyGameType.LUXURY ? SystemMessageId.CONGRATULATIONS_C1_HAS_OBTAINED_S2_X_S3_IN_THE_PREMIUM_LUCKY_GAME : SystemMessageId.CONGRATULATIONS_C1_HAS_OBTAINED_S2_X_S3_IN_THE_STANDARD_LUCKY_GAME);
                    sm.addPcName(player);
                    sm.addLong(r.getCount());
                    sm.addItemName(item);
                    player.broadcastPacket(sm, 1000);
                    break;
                }
            }
        }
        
        player.sendItemList();
        
        player.getVariables().set(PlayerVariables.FORTUNE_TELLING_VARIABLE, playCount >= 50 ? (playCount - 50) : playCount);
        if (blackCat && (playCount < 50))
        {
            player.getVariables().set(PlayerVariables.FORTUNE_TELLING_BLACK_CAT_VARIABLE, true);
        }
    }
}
 
уники должны по сути выдаваться когда на текущее значение счетчика проведенных наград есть уникальная награда
в коде у тебя это вычисляется в этом вот фрагменте
Java:
        for (int i = 0; i < _reading; i++)
        {
            final int serverGameNumber = LuckyGameData.getInstance().increaseGame();
            holder.getUniqueReward().stream().filter(reward -> reward.getPoints() == serverGameNumber).forEach(item -> rewards.computeIfAbsent(LuckyGameItemType.UNIQUE, _ -> new ArrayList<>()).add(item));
        }
где serverGameNumber - это как раз переменная где хранится количество проведенных на всем сервере попыток.
вот и смотри в итоге что там вобще в serverGameNumber отдается и т.д.

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

Java:
    public void playGame(Player player, LuckyGameType type, int index, int count)
    {
        if (!GamesConfig.ALLOW_LUCKY_GAME)
        {
            player.sendPacket(ExBettingLuckyGameResult.DISABLED);
            return;
        }

        if (count < 1 || count > GamesConfig.MAX_CARD_COUNT)
        {
            player.sendPacket(new ExBettingLuckyGameResult(LuckyGameResultType.INVALID_ITEM_COUNT, type));
            return;
        }

        LuckyGameData data = LuckyGameDataHolder.getInstance().getData(index);

        if (data == null || data.getTicketId() == 0)
        {
            player.sendPacket(ExBettingLuckyGameResult.DISABLED, SystemMsg.SYSTEM_ERROR);
            return;
        }

        if (ItemUtils.getItemCount(player, data.getTicketId()) < count)
        {
            player.sendPacket(new ExBettingLuckyGameResult(LuckyGameResultType.INVALID_ITEM_COUNT, type));
            return;
        }

        if (!ItemUtils.checkInventory(player, false))
        {
            player.sendPacket(new ExBettingLuckyGameResult(LuckyGameResultType.INVALID_CAPACITY, type));
            return;
        }

        ChanceList<ItemData> commonRewards = data.getRewards(LuckyGameRewardType.COMMON);

        if (commonRewards == null)
        {
            player.sendPacket(ExBettingLuckyGameResult.DISABLED, SystemMsg.SYSTEM_ERROR);
            return;
        }

        ChanceList<ItemData> modifyRewards = data.getRewards(LuckyGameRewardType.MODIFY);
        boolean useUniqueCounter = !data.getUniqueRewards().isEmpty();
        SystemMessage msg = null;
        ItemData reward = null;
        EnumMap<LuckyGameRewardType, List<ItemData>> rewards = new EnumMap<>(LuckyGameRewardType.class);

        try
        {
            if (modifyRewards != null && data.getModifyCounter(player).get() <= 0)
                data.setModifyCounter(player, data.getRandomModifyPoints());

            for (int i = 0; i < count; i++)
            {
                if (useUniqueCounter)
                {
                    int uniquePoints = data.incUniqueCounter();
                    reward = data.getUniqueReward(uniquePoints);

                    if (reward != null)
                    {
                        rewards.computeIfAbsent(LuckyGameRewardType.UNIQUE, k -> new ArrayList<>()).add(reward);

                        if (type == LuckyGameType.PREMIUM)
                            msg = new SystemMessage(SystemMsg.CONGRATULATIONS__C1_HAS_OBTAINED_S2_OF_S3_IN_THE_LUXURY_FORTUNE_READING).addName(player).addItemName(reward.getId()).addNumber(reward.getCount());
                        else
                            msg = new SystemMessage(SystemMsg.CONGRATULATIONS__C1_HAS_OBTAINED_S2_OF_S3_THROUGH_FORTUNE_READING).addName(player).addItemName(reward.getId()).addNumber(reward.getCount());
                    }

                    if (uniquePoints >= data.getTurningPoints())
                        data.setUniqueCounter(0);
                }

                if (modifyRewards != null)
                {
                    int modifyPoints = data.decModifyCounter(player);

                    if (modifyPoints <= 0)
                    {
                        data.setModifyCounter(player, data.getRandomModifyPoints());
                        reward = modifyRewards.get();

                        if (reward != null)
                        {
                            rewards.computeIfAbsent(LuckyGameRewardType.MODIFY, k -> new ArrayList<>()).add(reward);
                            continue;
                        }
                    }
                }

                reward = commonRewards.get();

                if (reward != null)
                    rewards.computeIfAbsent(LuckyGameRewardType.COMMON, k -> new ArrayList<>()).add(reward);
            }

            if (useUniqueCounter)
                data.storeUniqueCounter();

            if (modifyRewards != null)
                data.storeModifyCounter(player);

            if (rewards.values().stream().mapToLong(i -> i.stream().count()).sum() < 1L)
            {
                player.sendPacket(ExBettingLuckyGameResult.DISABLED, SystemMsg.SYSTEM_ERROR);
                return;
            }

            ItemUtils.removeItem(player, data.getTicketId(), count);
            rewards.values().forEach(list -> list.forEach(item -> ItemUtils.addItem(player, item)));

            if (msg != null)
                Announcements.broadcast(msg);

            player.sendPacket(new ExBettingLuckyGameResult(LuckyGameResultType.SUCCESS, type, (int) ItemUtils.getItemCount(player, data.getTicketId()), rewards));

            if (player.isGM())
            {
                ChatUtils.sendSysMessage(player, "Game index: " + data.getIndex() + "; unique counter: " + data.getUniqueCounter() + "; modify counter: " + data.getModifyCounter(player));
                rewards.entrySet().forEach(e -> ChatUtils.sendSysMessage(player, "Reward type: " + e.getKey() + "; count: " + e.getValue().size()));
            }
        }
        catch (Exception e)
        {
            player.sendPacket(ExBettingLuckyGameResult.DISABLED, SystemMsg.SYSTEM_ERROR);
            return;
        }
    }
 
Gaikotsu, Я над этим фрагментом с 21.00 до 4 часов утра колдовал. Смотрел как работает данный ивент на офе. Там уник награда выпадает фиксированно каждому игроку с 30 до 40 карты. Если мне не изменят память в последних версиях там все было упрощено настолько что разброса не было вовсе и уник падал то ли с 37 то ли с 39 прокрутки. И итем падал скорее всего уже по такому же алгоритму как и в обычной награде ( но это не точно) просто наблюдение. Так вот я пытался вырезать вообще эти поинты из кода и сделать все намного проще, как описал выше. Но практических знаний не хватает чтоб реализовать. В конце концов я все равно сделаю как мне нужно, вопрос только в том сколько на это уйдёт времени.
 
Java:
            final double chance = 100 * Rnd.nextDouble();
            double totalChance = 0;
            for (ItemChanceHolder item : holder.getCommonReward())
            {
                totalChance += item.getChance();
                if (totalChance >= chance)
                {
                    rewards.computeIfAbsent(LuckyGameItemType.COMMON, k -> new ArrayList<>()).add(item);
                    break;
                }
            }
ну а шо, каждый старт - рандом ))
а holder.getCommonReward хоть отсортирован по шансам?
 
Последнее редактирование:
Там уник награда выпадает фиксированно каждому игроку с 30 до 40 карты. Если мне не изменят память в последних версиях там все было упрощено настолько что разброса не было вовсе и уник падал то ли с 37 то ли с 39 прокрутки. И итем падал скорее всего уже по такому же алгоритму как и в обычной награде ( но это не точно) просто наблюдение. Так вот я пытался вырезать вообще эти поинты из кода и сделать все намного проще, как описал выше. Но практических знаний не хватает чтоб реализовать. В конце концов я все равно сделаю как мне нужно, вопрос только в том сколько на это уйдёт времени
эм... это вобще-то modify награда. я же говорил про unique награды - которые срабатывают от общего счетчика попыток на всем сервере.

а вот modify да - юзает персональный счетчик для каждого игрока, в твоем коде это playCount и проверки на его значение.
 
эм... это вобще-то modify награда. я же говорил про unique награды - которые срабатывают от общего счетчика попыток на всем сервере.

а вот modify да - юзает персональный счетчик для каждого игрока, в твоем коде это playCount и проверки на его значение.
Понял, тогда получается у меня modify вообще не срабатывают. При выпадении тоже ведь должен срабатывать черный кот?
 
ну вот попробуй вывести при розыгрыше инфу, какого типа награды тебе выдает и уже от этого дальше разбирайся, если modify наград нет

а holder.getCommonReward хоть отсортирован по шансам?
а это вобще никак не должно влиять на выбор награды
 
Последнее редактирование модератором:
Gaikotsu, вообщем ситуация такая на каждом новом персонаже 1 раз дает modify награду и потом идут только награды из списка common turning_point="10000" и по достижению по очереди unique. В чем может быть проблема? Суммы процентов пересчитал по 10 раз. Везде все сходится.
 
как вариант - не инициализирует заново личный счетчик для modify наград после ее выдачи.
выводи в консоль значение playCount к примеру тупо через System.out.println и смотри что в итоге будет - сбросится ли он вобще после выдачи modify награды.
 
Последнее редактирование:
Gaikotsu, чет не могу вдуплить, прям в клиенте это можно вывести? Или ты имеешь в виду серверную консоль.
 

Похожие темы

Назад
Сверху