TW Big Inventory

This script, just make inventory biggest!

// ==UserScript==
// @name TW Big Inventory
// @namespace TW_Jack
// @author Jackson
// @description This script, just make inventory biggest!
// @include https://*.the-west.*/game.php*
// @version 1.8
// @website https://liberdesign.eu
// @icon https://www.liberdesign.eu/wp-content/uploads/west/biginv.ico
// @license Free
// @grant none
// ==/UserScript==
(function(fn) {
    var script = document.createElement('script');
    script.setAttribute('type', 'application/javascript');
    script.textContent = '(' + fn + ')();';
    document.body.appendChild(script);
    document.body.removeChild(script);
})(function() {
    var bigInventor = {
        version: '1.7',
        author: 'Jackson',
        minGame: '2.03',
        maxGame: Game.version.toString(),
        website: 'https://greasyfork.org/ru/scripts/31626-tw-big-inventory',
        updateUrl: 'https://raw.githubusercontent.com/Vartanov/Tre-Pulsanti/master/agg.js',
        images: {}
    };
    Inventory.uid = "inventory";
    Inventory.size = 66;
    Inventory.sizeSearch = 55;
    Inventory.sizeCustom = 55;
    Inventory.width = 608;
    Inventory.availableCategories = ['new', 'belt', 'body', 'foot', 'head', 'neck', 'pants', 'animal', 'right_arm', 'left_arm', 'yield', 'upgradeable'];
    Inventory.defaultCategory = 'new';
    Inventory.latestSize = 66;
    Inventory.context = null;
    $("<link href='https://www.liberdesign.eu/wp-content/uploads/west/inv.css' rel='stylesheet' type='text/css'>").appendTo("head");
    var langs;
    langs = {
        it_IT: {
            lang_select: 'Lingua selezionata',
            language: 'Italiano',
            ApiGui: 'Questo script aumenta lo spazio nell inventario.',
            contact: 'Contatti',
            title: 'Big Inventory',
            update: 'Aggiorna',
            updateAvailable: 'Nuova versione dello script disponibile',
            name: 'Big Inventory',
            msgme: 'Mandami un messaggio in gioco',
            mailme: 'Mandami una mail',
            Doppioni : {
                tip : 'Mostra solo duplicati',
                upgradeable:'Migliorabile',
                noset : 'Non appartengono ai set',
                sellable : 'Vendibile',
                auctionable : 'Vendibile all asta',
                tipuse : 'Mostra solo consumabili',
                tiprecipe : 'Mostra solo ricette',
                tipsets : 'Mostra solo i set',
                tutteOpz : 'Tutto',
            }
        },
        en_US: {
            lang_select: 'Language selected',
            language: 'English',
            ApiGui: 'This script increases space in the inventory.',
            contact: 'Contact',
            title: 'Big Inventory',
            update: 'Update',
            updateAvailable: 'New version of the script are avialable.',
            name: 'Big Inventory',
            msgme: 'Message me in game',
            mailme: 'Send me a mail',
            Doppioni : {
                tip : 'Show only duplicates',
                upgradeable:'Upgradeables',
                noset : 'Without set items',
                sellable : 'Sellables',
                auctionable : 'Auctionables',
                tipuse : 'Show only useables',
                tiprecipe : 'Show only recipes',
                tipsets : 'Show only set items',
                tutteOpz : 'All',
            }
        },
        ru_RU: {
            lang_select: 'Выбранный язык',
            language: 'Русский',
            ApiGui: 'Этот скрипт, увеличивает пространство инвентаря!',
            contact: 'Контакты',
            title: 'Большой инвентарь',
            name: 'Большой инвентарь',
            update: 'Обновление',
            updateAvailable: 'Доступно обновление скрипта.',
            msgme: 'Напиши мне в игре',
            mailme: 'Почтовый ящик',
            Doppioni : {
                tip : 'Показывать только дубликаты',
                upgradeable:'Можно улучшить',
                noset : 'Не подлежащие наборам',
                sellable : 'Продаваемые',
                auctionable : 'Продаваемые на аукционе',
                tipuse : 'Показать только используемые',
                tiprecipe : 'Показать только рецепты',
                tipsets : 'Показывать только наборы',
                tutteOpz : 'Все',
            }
        },
        de_DE: {
            lang_select: 'Sprache',
            language: 'Deutsch',
            ApiGui: 'Dieses Skript vergrössert dein Inventar.',
            contact: 'Kontakt',
            title: 'Big Inventory',
            update: 'Update',
            updateAvailable: 'Für das Script ist eine neue Version erhältlich.',
            name: 'Big Inventory',
            msgme: 'Ingame Nachricht (Nur the-west.it)',
            mailme: 'Schicke mir eine E-Mail',
            Doppioni: {
                tip : 'Duplikate',
                upgradeable: 'Veredelbare',
                noset: 'Ohne Set-Items',
                sellable: 'Verkaufbare',
                auctionable: 'Auktionierbare',
                tipuse: 'Verbrauchbare',
                tiprecipe: 'Rezepte',
                tipsets: 'Set-Items',
                tutteOpz: 'Alle',
            }
        },
        ro_RO: {
            lang_select: 'Limba selectionata',
            language: 'Romana',
            ApiGui: 'Acest script, mareste spatiul in inventar',
            contact: 'Contacte',
            title: 'Big Inventory',
            name: 'Big Inventory',
            update: 'Actualizare',
            updateAvailable: 'Disponibila o noua actualizare.',
            msgme: 'Trimitemi mesaj in joc',
            mailme: 'Trimitemi un mail',
            Doppioni : {
                tip : 'Afișați numai duplicate',
                upgradeable:'Actualizabile',
                noset : 'Fără elemente din set',
                sellable : 'Sellables',
                auctionable : 'Auctionables',
                tipuse : 'Afișați numai utilizabile',
                tiprecipe : 'Afișați numai ricete',
                tipsets : 'Afișați numai seturi',
                tutteOpz : 'All',
            }
        }
    };
    var MPlang = langs.hasOwnProperty(Game.locale) ? langs[Game.locale] : langs.it_IT;
    var bigInventorApi = TheWestApi.register('bigInventor', MPlang.title, bigInventor.minGame, bigInventor.maxGame, bigInventor.author, bigInventor.website);
    bigInventorApi.setGui('<br><i>' + MPlang.lang_select + ': </i>' + MPlang.language + '<br><br>' + MPlang.ApiGui + '<br><br><i>' + MPlang.name + ' v' + bigInventor.version +
        '</i><br><br>' + MPlang.contact + ':</b><ul style="margin-left:15px;"><li>' + MPlang.msgme + '<a  style="margin-left:15px;" href="javascript:void(PlayerProfileWindow.open(542314));">Jackson</a>' + '</li><li>' + MPlang.mailme + '<a  style="margin-left:15px;" href="mailto:[email protected]">[email protected]</a>' + '</li></ul>');
    bigInventor.gui = {};
    var ICONE = {
        init: function () {
            try {
                EventHandler.signal("ICONE.init");
                var that = this;
                var timeout = 0;
                this.interval = setInterval(
                    function () {
                        var loading = false;
                        if (isDefined(Character.playerId) && Character.playerId === 0) {
                            loading = false;
                        } else if (!isDefined(ItemManager)) {
                            loading = false;
                        } else if (isDefined(ItemManager.initialized) && !ItemManager.initialized) {
                            loading = false;
                        } else if (isDefined(window.TWDB)) {
                            if (!window.TWDB.ClothCalc.ready) {
                                loading = false;
                                timeout++;
                                if (timeout > 20) {
                                    ErrorLog.log('Errore, caricamento TWDB non possibile ?');
                                    ICONE.isTWDBHere = true;
                                    loading = true;
                                }
                            } else {
                                ICONE.isTWDBHere = true;
                                loading = true;
                            }
                        } else {

                            loading = true;
                        }
                        if (loading) {
                            clearInterval(that.interval);
                            if (ICONE.scriptStorage === null) {
                                ICONE.scriptStorage = new Storage("local", "Storage.");
                            }
                            ICONE.ready = true;
                            EventHandler.signal('ICONE.ready');
                            ICONE.Inventario.create();
                        }

                    }, 500);
            } catch (e) {

                ErrorLog.log("Errore inizializzazione", e);
                ErrorLog.showLog();
                ICONE.ready = false;
            }
        },
        Inventario: {
            create: function () {
                ICONE.Inventario.attach();
            },
            attach: function () {
                EventHandler.listen("inventory_ready", ICONE.Inventario.addCheckBoxBag, "duplbag");
            },
            detach: function () {
                EventHandler.unlisten("inventory_ready", ICONE.Inventario.addCheckBoxBag, "duplbag");
                $('#bagFilterIsCollect', Inventory.DOM).remove();
            },
            cercaDuplicati: function (filtru) {

                var searchTxt = "";
                var searchVal = $('#inventory_search', Inventory.DOM).val();
                if (searchVal.lenght === 0 || Inventory.category != 'set') {
                    searchVal = ".*";
                } else {
                    searchTxt = (searchVal.lenght === 0) ? "" : " (" + searchVal + ")";
                }
                var res = Bag.search(searchVal);
                $('#inventory_search', Inventory.DOM).val("");
                var doppioni = [];
                var sell = 0;
                $.each(res, function (ind1, item) {
                    if (item.obj.type != 'yield' && ($.inArray(item.getType(), Inventory.getCategoryTypes(Inventory.category)) > -1 || Inventory.category == 'set' || Inventory.category == 'new')) {
                        var count = item.getCount();
                        var weared = Wear.carries(item.obj.item_base_id);
                        if (weared) {
                            count += 1;
                        }
                        if (count > 1) {
                            switch (filtru) {
                                case 'upgradeable':
                                    if (count < 3 || !item.obj.upgradeable) {
                                        item = null;
                                    }
                                    break;
                                case 'nosets':
                                    if (item.obj.set !== null) {
                                        item = null;
                                    }
                                    break;
                                case 'sellable':
                                    if (!item.obj.sellable) {
                                        item = null;
                                    }
                                    break;
                                case 'auctionable':
                                    if (!item.obj.auctionable) {
                                        item = null;
                                    }
                                    break;
                                default:
                                    break;
                            }
                            if (isDefined(item)) {
                                doppioni.push(item);
                                sell += (item.getSellPrice()) * (count - 1);
                            }
                        }
                    } else {
                    }
                });
                var lastCat = Inventory.category;
                Inventory.showSearchResult(doppioni || []);
                $('#sumsearch', Inventory.DOM).remove();
            },
            searchSpeciales: function (what) {
                $('#inventory_search', Inventory.DOM).val(what);
                var res = Bag.search(what);
                Inventory.showSearchResult(res || []);
                return res;
            },
            getDetSearchBox: function () {
                if (isDefined(west.storage.ItemSetManager)) {
                    var selSets = new west.gui.Selectbox();
                    selSets.setWidth(200);
                    $(selSets.elContent).css({
                        "max-height": "270px",
                        "width": "250px",
                        "overflow-y": 'auto'
                    });
                    ICONE.selAdded = [];
                    selSets.addItem('all', MPlang.Doppioni.tutteOpz);
                    selSets.addItem('upgradeable', MPlang.Doppioni.upgradeable);
                    selSets.addItem('nosets', MPlang.Doppioni.noset);
                    selSets.addItem('sellable', MPlang.Doppioni.sellable);
                    selSets.addItem('auctionable', MPlang.Doppioni.auctionable);
                    selSets.addListener(function (e) {
                        switch (e) {
                            case 'all':
                                $('#inventory_search', Inventory.DOM)
                                    .val("");

                                break;
                            default:

                                break;
                        }
                        ICONE.Inventario.cercaDuplicati(e);

                        return true;
                    });

                    return selSets;

                }
                // return selSets;
            },
            getSetNamesBox: function (setsCache) {

                if (isDefined(west.storage.ItemSetManager)) {

                    var selSets = new west.gui.Selectbox();
                    selSets.setWidth(200);

                    $(selSets.elContent).css({
                        "max-height": "270px",
                        "width": "250px",
                        "overflow-y": 'auto'
                    });

                    ICONE.selAdded = [];

                    selSets.addItem('setitems',
                        MPlang.Doppioni.tutteOpz);

                    $
                        .each(
                            setsCache,
                            function (ind2, item) {

                                var itemsSet = west.storage.ItemSetManager
                                    .get(item.obj.set);
                                if (!isDefined(ICONE.selAdded[itemsSet.name])) {
                                    ICONE.selAdded[itemsSet.name] = true;
                                    selSets.addItem(
                                        itemsSet.name,
                                        itemsSet.name);
                                }

                            });

                    selSets.addListener(function (e) {
                        ICONE.Inventario.searchSpeciales(e);
                        return true;
                    });
                    return selSets;
                }
                return selSets;
            },
            addCheckBoxBag: function (div) {
                if ($('#bagFilterIsCollect', Inventory.DOM).length === 0) {

                    var setsCache = Bag.search('setitems');

                    setsCache.sort(function (a, b) {
                        var x = west.storage.ItemSetManager
                            .get(a.obj.set).name;
                        var y = west.storage.ItemSetManager
                            .get(b.obj.set).name;

                        if (typeof x === 'string' && typeof x === 'string') {

                            return x.localeCompare(y);
                        }
                        return ((x < y) ? -1 : ((x > y) ? 1 : 0));
                    });

                    var selBox = ICONE.Inventario.getSetNamesBox(setsCache);
                    var spanD = $('<div id="bagFilterIsCollect"  ' + 'style="display: flex; position: inherit; float: right;"/>');
                    var duplicat = $("<span title='" + MPlang.Doppioni.tip + "' id='inventory_doublons'"
                        + '" class="filter_inventory filter_dopp hasMousePopup"'
                        + '" style="cursor: pointer; position: relative; background: url(https://www.liberdesign.eu/wp-content/uploads/west/small.png) no-repeat; background-position: -2px 0;" />'
                        + "</span>");
                    duplicat.click(function (e) {
                        $('#sumsearch').remove();
                        ICONE.Inventario.getDetSearchBox().show(e);
                    });
                    spanD.append(duplicat);
                    var utilizz = $('<span title="'
                        + MPlang.Doppioni.tipuse
                        + '" id="inventory_useables"'
                        + '" class="filter_inventory filter_utiliz hasMousePopup"'
                        + '" style="cursor: pointer; position: relative; background: url(https://www.liberdesign.eu/wp-content/uploads/west/small.png) no-repeat; background-position: -45px 0;">'
                        + "</span>");
                    utilizz.click(function () {
                        $('#sumsearch').remove();
                        ICONE.Inventario.searchSpeciales('useable');
                    });
                    spanD.append(utilizz);
                    var ricetta = $('<span title="'
                        + MPlang.Doppioni.tiprecipe
                        + '" id="inventory_recipe"'
                        + '" class="filter_inventory filter_ricet hasMousePopup"'
                        + '" style="position: relative; background: url(https://www.liberdesign.eu/wp-content/uploads/west/small.png) no-repeat; cursor: pointer; background-position: -88px 0;" >'
                        + '</span>');
                    ricetta.click(function () {
                        $('#sumsearch').remove();
                        ICONE.Inventario.searchSpeciales('recipe');
                    });
                    spanD.append(ricetta);
                    var naboru = $('<span title="'
                        + MPlang.Doppioni.tipsets
                        + '" id="inventory_sets"'
                        + '" class="filter_inventory filter_nabor hasMousePopup"'
                        + '" style="cursor: pointer; position: relative; background: url(https://www.liberdesign.eu/wp-content/uploads/west/small.png) no-repeat; background-position: -131px 0;" >'
                        + "</span>");
                    naboru.click(function (e) {
                        $('#sumsearch').remove();
                        selBox.show(e);
                    });
                    spanD.append(naboru);
                    $('.search_container').css('left', '35%').css('bottom', '10px');
                    $('.filters', Inventory.DOM).append(spanD);

                }

            }
        }
    };
    bigInventor.gui.init = function () {
        bigInventor.gui.makeButton = function (caption, callback) {
            return new west.gui.Button(caption, callback);
        };
    };
    bigInventor.Updater = function () {
        $.getScript(bigInventor.updateUrl, function () {
            if (aggiornaScript.bigInventor != bigInventor.version) {
                var updateMessage = new west.gui.Dialog(MPlang.update + ': ' + MPlang.name, '<span>' +
                    MPlang.updateAvailable + '<br><br><b>v' +
                    aggiornaScript.bigInventor + ':</b><br>' +
                    aggiornaScript.bigInventorNew + '</span>', west.gui.Dialog.SYS_WARNING).addButton(MPlang.update, function () {
                    updateMessage.hide();
                    location.href = bigInventor.website + '/code.user.js';
                }).addButton('cancel').show();
            }
        });
    };
    function Storage(type, namespace) {
        var object = this;
        if (typeof (type) != "string")
            type = "session";
        switch (type) {
            case "local": {
                object.storage = localStorage;
            }
                break;
            case "session": {
                object.storage = sessionStorage;
            }
                break;
            default: {
                object.storage = sessionStorage;
            }
                break;
        }
        if (!namespace || (typeof (namespace) != "string" && typeof (namespace) != "number"))
            namespace = "ScriptStorage";

        object.namespace = [ namespace, "." ].join("");

        object.setItem = function(key, value) {
            try {
                object.storage.setItem(escape( [ object.namespace,
                    key ].join("")), JSON.stringify(value));
            } catch (e) {
            }
        };
        object.getItem = function(key, defaultValue) {
            try {
                var value = object.storage.getItem(escape( [
                    object.namespace, key ].join("")));
                if (value)
                    return eval(value);
                else
                    return defaultValue;
            } catch (e) {
                return defaultValue;
            }
        };
        object.removeItem = function(key) {
            try {
                object.storage.removeItem(escape(collection.craftfilterMarket[object.namespace, key].join("")));
            } catch (e) {
            }
        };
        object.keys = function() {
            var array = [];
            var indJack = 0;
            do {
                try {
                    var key = unescape(object.storage.key(indJack++));
                    if (key.indexOf(object.namespace) == 0
                        && object.storage.getItem(key))
                        array.push(key
                            .slice(object.namespace.length));
                } catch (e) {
                    break;
                }
            } while (true);
            return array;
        };
    }
    $(document).ready(function () {
        try {
            bigInventor.gui.init();
            ICONE.init();
            setTimeout(bigInventor.Updater, 5000);
        } catch (e) {
            console.log(e.stack);
        }
    });
});