Widget:GangCalc: различия между версиями

Материал из FREESTREET База знаний
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 26: Строка 26:


<script>
<script>
mw.loader.using('jquery', function() {
/* Оборачиваем в RLQ, чтобы ждать загрузки ядра MediaWiki */
    // Находим конкретный блок по ID
(window.RLQ = window.RLQ || []).push(function() {
    var containerId = 'gang-calc-<!--{$id|default:'1'}-->';
    var $container = $('#' + containerId);
      
      
     $container.find('.gc-btn').click(function() {
     mw.loader.using('jquery', function() {
         var $btn = $(this);
         /* Этот код сработает только когда jQuery и mw будут готовы */
        var coins = parseInt($container.find('.gc-coins').val());
        var players = parseInt($container.find('.gc-players').val());
        var $error = $container.find('.gc-error');
        var $result = $container.find('.gc-result');
          
          
         $error.hide();
         // Используем класс .gang-calc-wrapper, чтобы скрипт работал
        $result.hide();
        // даже если виджет вставлен несколько раз или внутри сложных шаблонов
        var containerId = 'gang-calc-<!--{$id|default:'1'}-->';
       
        // Ждем полной отрисовки DOM (на всякий случай)
        $(function() {
            var $container = $('#' + containerId);
           
            // Если контейнер не найден (например, id конфликтует), ищем по классу внутри родителя
            if ($container.length === 0) {
                // Фолбэк на случай проблем с ID
                return;  
            }


        // Проверка ошибок
            $container.find('.gc-btn').click(function() {
        if (isNaN(coins) || coins < 0) {
                var $btn = $(this);
            $error.text('Пожалуйста, введите корректную сумму монет.').fadeIn();
                // Ищем поля именно внутри этого контейнера
            return;
                var coins = parseInt($container.find('.gc-coins').val());
        }
                var players = parseInt($container.find('.gc-players').val());
        if (isNaN(players) || players < 2 || players > 10) {
                var $error = $container.find('.gc-error');
            $error.text('Количество игроков должно быть от 2 до 10 (согласно правилам).').fadeIn();
                var $result = $container.find('.gc-result');
            return;
               
        }
                $error.hide();
                $result.hide();


        // Логика процентов из вашей таблицы
                if (isNaN(coins) || coins < 0) {
        var percent = 0;
                    $error.text('Введите корректную сумму монет.').fadeIn();
        if (players >= 2 && players <= 5) {
                    return;
            percent = 0.10; // 10%
                }
        } else if (players >= 6 && players <= 9) {
                if (isNaN(players) || players < 2 || players > 10) {
            percent = 0.20; // 20%
                    $error.text('Игроков должно быть от 2 до 10.').fadeIn();
        } else if (players === 10) {
                    return;
            percent = 0.30; // 30%
                }
        }


        // Расчет по формулам
                var percent = 0;
        // 1. Покупатель получает X% от суммы
                if (players >= 2 && players <= 5) percent = 0.10;
        var buyerPoints = Math.round(coins * percent);
                else if (players >= 6 && players <= 9) percent = 0.20;
       
                else if (players === 10) percent = 0.30;
        // 2. Остальные: (Сумма * X%) / (Игроков - 1)
 
        // Вычитаем 1, так как покупатель не входит в число "остальных"
                var buyerPoints = Math.round(coins * percent);
        var othersPoints = Math.round((coins * percent) / (players - 1));
                var othersPoints = Math.round((coins * percent) / (players - 1));


        // Вывод на экран
                $container.find('.res-buyer').text(buyerPoints);
        $container.find('.res-buyer').text(buyerPoints);
                $container.find('.res-others').text(othersPoints);
        $container.find('.res-others').text(othersPoints);
                $container.find('.res-percent').text((percent * 100) + '%');
        $container.find('.res-percent').text((percent * 100) + '%');
               
       
                $result.fadeIn();
        $result.fadeIn();
            });
        });
     });
     });
});
});
</script>
</script>
</includeonly>
</includeonly>

Версия от 19:44, 26 ноября 2025