Greasy Fork is available in English.

iks: virtonomica оптовое строительство

Автоматический запуск постройки нескольких подразделений одного типа, кроме офисов и гос.предприятий

// ==UserScript==
// @name        iks: virtonomica оптовое строительство
// @namespace   virtonomica
// @description Автоматический запуск постройки нескольких подразделений одного типа, кроме офисов и гос.предприятий
// @include     http*://*virtonomic*.*/*/main/unit/create/*
// @icon            https://www.google.com/s2/favicons?domain=virtonomica.ru
// @version     1.1.7
// @grant       none
// ==/UserScript==


/**************************************************/


var run = function () {
    const MAXUNITS=1000;
    let isCreateSeriesBinded = false;
    let seriesCount = 1;
    let seriesCreated = 0;
    let isCreateExec = false;
    let buy_unit;

    let indexouc = document.location.href.indexOf("/unit/create");
    let companyId = document.location.href.substring(indexouc + 13);
    let jn = companyId.match(/\d+/g);
    companyId = jn.join('').trim();
    console.log(companyId);

    let errors = {
        '-100': 'Ошибка при создании предприятия. Возможно, у вас не хватило средств на постройку, покупку и внедрение технологии, или вы ввели некорректные данные.',
        '-10': 'Ошибка при создании предприятия. У компании нет офиса в регионе, где создаётся предприятие.',
        '-20': 'Ошибка при создании предприятия. Компания уже имеет офис в выбранном регионе.',
        '-30': 'Ошибка при создании предприятия. У компании недостаточно средств для покупки земли.',
        '-40': 'Ошибка при создании предприятия. У компании недостаточно средств для покупки технологии.',
        '-50': 'Ошибка при создании предприятия. У компании недостаточно средств для покупки месторождения.',
        '-60': 'Ошибка при создании предприятия. У компании недостаточно средств для въезда в новое помещение.',
        '-70': 'Ошибка при создании предприятия. В выбранном городе нет свободных площадей для создания выбранного предприятия. Возможно, вас опередили другие игроки.',
        '-80': 'Ошибка при создании предприятия. Выбранное месторождение недоступно. Возможно, вас опередили другие игроки.',
        '-90': 'Ошибка при создании предприятия. Недостаточно денег',
    };



    buy_unit = function (args, token) {
        if (seriesCreated < seriesCount && isCreateExec) {
            ApiConnection.post({
                base_url: '/api/',
                url: '?action=company/build&app=adapter_vrt',
                token: token,
                id: companyId,
                kind: UnitCreateWizard.get('unittype').kind,
                name: UnitCreateWizard.name,
                args: args
            }).then(function (res) {
                if (parseInt(res) > 0) {
                    seriesCreated++;
                    console.log('created: ' + seriesCreated);
                    buy_unit(args, token);
                } else {
                    $('.alert_slots .alert').text(errors[res]);
                    $('.alert_slots').show();
                    isCreateExec = false;
                    $('button#createSeriesButton').show();
                    $('button#cancelSeriesButton').hide();
                }
            });
        } else {
            isCreateExec = false;
            $('button#createSeriesButton').show();
            $('button#cancelSeriesButton').hide();
        }

        $("div#createSeriesInfo").html('<span class="margin-5-left"><div class="col-sm-12 unit-name">Создано: ' + seriesCreated + ' </div> </span>');

    }

    let buy_units = function (args) {
        $('button#createSeriesButton').hide();
        $('button#cancelSeriesButton').show();
        isCreateExec = true;
        seriesCreated = 0;

        ApiConnection.get({
            base_url: '/api/',
            url: '?action=token&app=virtonomica',
        }).then(function (res) {
            console.log('token: ' + res);
            buy_unit(args, res);
        });

    };



    $('div#mainContent').bind('DOMSubtreeModified', function () {
        let but = $('div#confirm-modal>div[class^="modal-dialog"]>div[class="modal-content"]>div[class="modal-footer"]>button[class^="btn btn-success"]');
        if (but.length == 1) {

            if (!isCreateSeriesBinded) {
                isCreateSeriesBinded = true;
                let modalBody=$('div#confirm-modal>div[class^="modal-dialog"]>div[class="modal-content"]>div[class="modal-body"]');
                let kind = UnitCreateWizard.get('unittype').kind;
                if (['sawmill', 'fishingbase', 'farm', 'orchard', 'villa', 'mine', 'office'].indexOf(UnitCreateWizard.get('unittype').kind) != -1) {
                    modalBody.append('<div class="row"><div class="col-sm-12 unit-name">Создание серии недопустимо</div></div>');
                    return;
                }                
                modalBody.append('<div class="row"><div class="col-sm-12 unit-name"><span class="margin-5-left">Количество: </span><span class="pull-right width60"><input id="seriesCountInput" type="number" min="1" max="'+MAXUNITS+'" class="form-control" value="' + seriesCount + '"/></span></div></div>');
                modalBody.append('<div class="row"  id="createSeriesInfo"></div>');
                modalBody.append('<div class="row"><div class="col-sm-12 unit-name"><span class="pull-right width60"><button id="createSeriesButton" class="btn btn-sm btn-circle">Создание серии</button><button id="cancelSeriesButton" class="btn btn-sm btn-circle">Отмена серии</button></span></div></div>');



                $("button#createSeriesButton").on("click", function () {

                    buy_units({
                        produce_id: UnitCreateWizard.get('produce') ? UnitCreateWizard.get('produce').id : 0,
                        product_id: UnitCreateWizard.get('product') ? UnitCreateWizard.get('product').id : 0,
                        square: UnitCreateWizard.get('size').square ? UnitCreateWizard.get('size').square : 0,
                        city_id: UnitCreateWizard.get('city').id,
                        size: UnitCreateWizard.get('size').size ? UnitCreateWizard.get('size').size : 0,
                        district_id: UnitCreateWizard.get('district') ? UnitCreateWizard.get('district').id : 0
                    });
                });

                $("button#cancelSeriesButton").on("click", function () {
                    isCreateExec = false;

                    $('button#createSeriesButton').show();
                    $('button#cancelSeriesButton').hide();
                });
                $("button#cancelSeriesButton").hide();

                $("input#seriesCountInput").change(function () {
                    seriesCount = parseInt($("input#seriesCountInput").val());
                    if(seriesCount>MAXUNITS)seriesCount=MAXUNITS;
                    else if(seriesCount<1)seriesCount=1;
                    $("input#seriesCountInput").val(seriesCount);
                });

            }

        } else {
            isCreateSeriesBinded = false;
            seriesCount = 1;
            seriesCreated = 0;
            isCreateExec = false;
        }

    });


}

if (window.top == window && (window.location.href.indexOf('main/unit/create') >= 0)) {
    var script = document.createElement('script');
    script.textContent = ' (' + run.toString() + ')();';
    document.documentElement.appendChild(script);
}