Гадание Таро (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>
 

уники должны по сути выдаваться когда на текущее значение счетчика проведенных наград есть уникальная награда
в коде у тебя это вычисляется в этом вот фрагменте
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;
        }
    }
А у тебя тут еще для гма при игре в чат инфа выводится. Если я в свой код такое воткну меня компилятор не обхаркает как обычно? Основные перепалки у нас с этим товарищем.

как вариант - не инициализирует заново личный счетчик для modify наград после ее выдачи.
выводи в консоль значение playCount к примеру тупо через System.out.println и смотри что в итоге будет - сбросится ли он вобще после выдачи modify награды.
Счетчик сбрасывается. Тут все нормально.

Вот, подскажите как это можно более подробно просмотреть?
 

Вложения

  • Mobius - GameServer 17-06-2025 21_53_59.webp
    Mobius - GameServer 17-06-2025 21_53_59.webp
    43,5 КБ · Просмотры: 20
  • Mobius - GameServer 18-06-2025 1_21_23.webp
    Mobius - GameServer 18-06-2025 1_21_23.webp
    251,9 КБ · Просмотры: 11
Последнее редактирование модератором:

Похожие темы

Назад
Сверху