Перейти к содержимому
RU
Играть

Форум

Счетчик открытых контейнеров.


baya

Рекомендованные сообщения

Доброго времени суток. Уверен, что большинство пользователей сталкивалось с подсчетом открытых контейнеров, записывая свои значения куда-то в блокнот, а затем считали все эти цифры. Так вот, готов предложить вам альтернативу блокнота. Теперь вам не нужно будет открывать блокнот, записывать туда количество открытых контейнеров, самостоятельно суммировать для вычисления количества до гаранта. Все эти действия сделает за вас специальный скрипт, который будет хранить и сохранять все данные, которые вы будете вводить. В коде реализовано хранение данных для разных аккаунтов, то есть вы можете не переживать, что вы ввели данные для одного аккаунта, а при переходе на другой у вас остались значения предыдущего аккаунта. 

 

Данный код написан с использование расширения для браузеров, а именно расширение "Tampermonkey", Помимо браузера я готов предоставить расширение для самого клиента танков. Все подробно расскажу и покажу.

 

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

1. Заходим в игру.

2. Нажимаете на значок расширения. 

3. Выбираете нужное расширение. (Если кто-то не знает что это такое, покажу примером на скрине.)

Скрытый текст

4. Далее нажимаете кнопку "Создать новый скрипт". 

5. Копируем полностью код.

6. Возвращаемся в расширение, нажимаем в поле ввода текста комбинацию клавиш ctrl + a.

7. Вставляйте скопированный код и сохраняем изменения клавишами ctrl + s.

8. Возвращаетесь в танки и обновляете страницу, либо же просто нажимаем клавишу F5

Теперь подробно опишу что делает данный счетчик. 
При открытии раздела с контейнерами у вас будет слева внизу будет два счетчика. Один из которых будет для обычных, а другой для эпических. Открываете контейнер, смотрите количество открытых и вписываете это в нужное окно. Счетчик автоматически будет сохранять данные, которые вписал пользователь, а при последующем вводе вам всего лишь нужно будет вписать новое количество открытых. Счетчик суммирует прошлые значения с новыми, которые вы ввели и при нажатии на Enter данные успешно обновятся. Вы можете протестировать данную логику, поскольку в самом скрипте существует кнопка "Очистить". К сожалению, пока что я не смог написать логику для автоматического суммирования после нажатия на кнопку для открытия контейнеров, но в будущем постараюсь решить эту проблему. 

Код предоставляю в открытом доступе.
 

Скрытый текст
// ==UserScript==
// @name         Count containers
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Count containers
// @author       You
// @match        https://tankionline.com/play/
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    var style = document.createElement('style');
    style.type = 'text/css';
    style.textContent = `
    .counters-container {position: absolute; bottom: 20px; width: 100%; display: flex; justify-content: space-between; z-index: 2;} .left-half {width: 20%;}.right-half {width: 20%;}
    .Common-container .DeviceButtonComponentStyle-blockAlterations {z-index: 4; !important}
    input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0;}`;

    document.head.appendChild(style);

    function getUserNickname() {
    var userInfoElement = document.querySelector('.UserInfoContainerStyle-textDecoration');
    if (userInfoElement) {
        var nickname = userInfoElement.textContent.trim();
        nickname = nickname.replace(/\[.*?\]/g, '').trim();
        return nickname;
    } else {
        return 'unknown';
    }
}

    function createCounterElement(id, title) {
        var userNickname = getUserNickname();
        var counterKey = `${userNickname}_${id}`;

        var counterElement = document.createElement('div');
        counterElement.style.padding = '10px';
        counterElement.style.border = '1px solid #ccc';
        counterElement.style.borderRadius = '5px';
        counterElement.style.backgroundColor = 'transparent';

        var counterLabel = document.createElement('span');
        counterLabel.innerHTML = `Открыто ${title} контейнеров: `;
        counterLabel.style.color = 'white';
        counterElement.appendChild(counterLabel);

        var counterInput = document.createElement('input');
        counterInput.style.webkitAppearance = 'none';
        counterInput.id = `${id}`;
        counterInput.type = "number";
        counterInput.value = localStorage.getItem(counterKey) || '0';
        counterInput.style.marginRight = '10px';
        counterInput.style.width = '50px';
        counterInput.style.background = 'transparent';
        counterInput.style.color = 'white';

        counterInput.addEventListener('focus', function() {
            this.value = '';
        });

        var previousValue;
counterInput.addEventListener('focus', function() {
    previousValue = parseInt(localStorage.getItem(counterKey)) || 0;
    this.value = '';
});

counterInput.addEventListener('blur', function() {
    var additionValue = parseInt(this.value);
    if (isNaN(additionValue) || this.value === '') {
        this.value = previousValue;
    } else {
        var newValue = previousValue + additionValue;
        localStorage.setItem(counterKey, newValue);
        this.value = newValue;
    }
});
        counterElement.appendChild(counterInput);

        var clearButton = document.createElement('button');
        clearButton.innerHTML = "Очистить";
        clearButton.style.cursor = 'pointer';
        clearButton.addEventListener('click', function() {
            localStorage.setItem(counterKey, 0);
            counterInput.value = '0';
        });
        counterElement.appendChild(clearButton);

        return counterElement;
    }

    function openContainer(containerType) {
        var userNickname = getUserNickname();
        var containerKey = `${userNickname}_${containerType}`;
        var currentValue = parseInt(localStorage.getItem(containerKey)) || 0;
        var newValue = currentValue + 1;
        localStorage.setItem(containerKey, newValue);
    }

    function setupObserver() {
        var observer = new MutationObserver(function(mutations) {
            var bottomBlock = document.querySelector('.ContainersComponentStyle-bottomBlock');
            if (bottomBlock) {
                var countersContainer = document.querySelector('.counters-container');
                if (countersContainer) {
                    countersContainer.parentNode.removeChild(countersContainer);
                }
                countersContainer = document.createElement('div');
                countersContainer.className = 'counters-container';
                countersContainer.style.flexDirection = 'column';
                countersContainer.style.width = '22%';
                countersContainer.style.left = '4.5%';

                var standardCounter = createCounterElement('standardContainerCount', 'обычных');
                countersContainer.appendChild(standardCounter);

                var ultraCounter = createCounterElement('epicContainerCount', 'ультра');
                countersContainer.appendChild(ultraCounter);

                bottomBlock.appendChild(countersContainer);

                observer.disconnect();
                checkIfBottomBlockDisappears(observer);
            }
        });

        observer.observe(document.body, {childList: true, subtree: true});
    }

    function checkIfBottomBlockDisappears(observer) {
        var bottomBlockCheck = setInterval(function() {
            var bottomBlock = document.querySelector('.ContainersComponentStyle-bottomBlock');
            if (!bottomBlock) {
                observer.observe(document.body, {childList: true, subtree: true});
                clearInterval(bottomBlockCheck);
            }
        }, 500);
    }

    window.addEventListener('load', setupObserver);
    window.addEventListener('load', setupObserver);
})();

 

 

Изменено пользователем Away
  • Нравится 4
  • Хаха 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Почему не выложить скрипт на хостинг, чтобы устанавливать его оттуда? (окей, вопросы ссылок на хостинги скриптов это отдельная история)

И.. получается, это просто аккумулятор значений. Было бы интересно если бы это все собиралось автоматически при открытии

В идеале - сохранять историю (именно в порядке выпадения, а не в порядке отображения)

  • Нравится 1
  • Хаха 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

к 225жжжжк (эпик)
з 60ж 119фж 90фффж 165ффффж(100К) 15

 

Вроде совпадает с заявленной вероятностью

Изменено пользователем mclander

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Quomodocunquizing Вроде бы для надежного определения текущего игрока можно использовать former.user.id в localStorage вместо костыльного чтения ника из интерфейса. Ник может меняться, ID меняться не должен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В 18.06.2024 в 11:48, Niced сказал:

Вроде бы для надежного определения текущего игрока можно использовать former.user.id в localStorage

Нет, нельзя. :heh:

  • Хаха 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пожалуйста, войдите для комментирования

Вы сможете оставить комментарий после входа



Войти сейчас
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×
×
  • Создать...