TW Accessible items

Add any item to be always visible on the main game screen

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

// ==UserScript==
// @name               TW Accessible items
// @namespace          https://greasyfork.org/users/205257
// @version            0.2
// @description        Add any item to be always visible on the main game screen
// @author             qwerfghj
// @match              https://*.the-west.com.br/game.php*
// @match              https://*.the-west.com.pt/game.php*
// @match              https://*.the-west.cz/game.php*
// @match              https://*.the-west.de/game.php*
// @match              https://*.the-west.dk/game.php*
// @match              https://*.the-west.es/game.php*
// @match              https://*.the-west.fr/game.php*
// @match              https://*.the-west.gr/game.php*
// @match              https://*.the-west.hu/game.php*
// @match              https://*.the-west.it/game.php*
// @match              https://*.the-west.net/game.php*
// @match              https://*.the-west.nl/game.php*
// @match              https://*.the-west.org/game.php*
// @match              https://*.the-west.pl/game.php*
// @match              https://*.the-west.ro/game.php*
// @match              https://*.the-west.ru/game.php*
// @match              https://*.the-west.se/game.php*
// @match              https://*.the-west.sk/game.php*
// @grant              none
// ==/UserScript==

(function(fn) {
	var newScript = document.createElement('script');
	newScript.setAttribute("type", "application/javascript");
	newScript.textContent = '(' + fn + ')();';
	(document.body || document.head || document.documentElement).appendChild(newScript);
	newScript.parentNode.removeChild(newScript);
})(function() {
    var scriptName = "TW Accessible items";
    var scriptURL = "https://greasyfork.org/en/scripts/371237-tw-accessible-items";
    var scriptAuthor = "qwerfghj";
    var scriptObject = "AccessibleItems";
    this[scriptObject] = {
        helpers: {
            item_by_id: function(item_id) {
                var base_id = ItemManager.itemIdToBaseItemId(item_id);
                return ItemManager.getByBaseId(base_id);
            },
            item_name: function(item_id) {
                return this.item_by_id(item_id).name;
            }
        },
		inventoryManager: {
			listeningSignals: [ 'inventory_loaded', 'inventory_changed', 'cooldown_changed', 'item_lifetime_changed', 'item_used' ],
			timeout: null,
            items: {},
			init: function() {
				EventHandler.listen(this.listeningSignals, this.signalHandler, this);
			},
			destroy: function() {
				clearTimeout(this.timeout);
				EventHandler.unlisten(this.listeningSignals, this.signalHandler, this);
			},
			check: function() {
                $.each(this.items, function(item_id, item) {
                    item.getMainDiv().css("display", "none");
                });
				clearTimeout(this.timeout);
                var that = this;
                $.each(AccessibleItems.settings.getItems(), function(item_id, position) {
                    var invItem = Bag.getItemByItemId(item_id);
                    if(invItem) {
                        that.handleItem(invItem, item_id, position);
                    }
                });
			},
			handleItem: function(item, id, position) {
                if (this.items[id] === undefined) {
                    this.items[id] = new tw2widget.InventoryItem(item.obj);
                    this.items[id].initDisplay();
                    var div = this.items[id].getMainDiv();
                    div.css("position", "absolute");
                    div.css("z-index", 1);
                    var action = item.obj.action;
                    this.items[id].getImgEl().click(function() { eval(action); });
                    this.items[id].setShowcompare(false);
                    div.appendTo(document.body);
                }

                item.initDisplay();
                if (item.elCooldown) {
                    this.items[id].showCooldown();
                    item.elCooldown = item.elCooldown.add(this.items[id].elCooldown);
                }

                this.items[id].setCooldown(Bag.itemCooldown[id]);
                this.items[id].setLifetime(item.lifetime, true);
                this.items[id].setCount(item.getCount());
                this.items[id].getMainDiv().css("left", position[0]);
                this.items[id].getMainDiv().css("top", position[1]);
                this.items[id].getMainDiv().css("display", "block");
            },
			signalHandler: function() {
				var that = this;
				this.timeout = setTimeout(function() { that.check(); }, 1000);
			}
		},
        settings: {
            init: function() {
                if (!AccessibleItems.storage.exists("items")) {
                    AccessibleItems.storage.add("items", { 2485000: [80, 217] });
                }
            },
            getItems: function() {
                return AccessibleItems.storage.get("items");
            },
            saveItems: function(items) {
                AccessibleItems.storage.add("items", items);
                AccessibleItems.inventoryManager.check();
                AccessibleItems.script.fillGui();
            },
            add: function() {
                this.createEditDialog();
            },
            createEditDialog: function(init_id = 0, init_x = "", init_y = "") {
                var that = this;

                var preview_item = null;
                var removePreviewIfNot = function(item_id) {
                    if (preview_item && preview_item.getId() !== item_id) {
                        preview_item.getMainDiv().remove();
                        preview_item = null;
                    }
                };

                var id = new west.gui.Textfield().setTooltip("1234000 or [item=1234000]");
                var x = new west.gui.Textfield(null, "number").setPlaceholder("left").setWidth(72).setValue(init_x);
                var y = new west.gui.Textfield(null, "number").setPlaceholder("top").setWidth(72).setValue(init_y);
                var d = new west.gui.Dialog(scriptName, '<div class="txcenter"><table style="margin: 0 auto"><tr><td class="qwerfghj_acs_item" style="padding-right: 10px"></td><td class="qwerfghj_acs_item_id" style="vertical-align: middle" colspan="2">Enter item id:<br /><input type="hidden" value="' + init_id + '" class="qwerfghj_acs_id" /></td></tr><tr><td style="vertical-align: middle">Position:</td><td class="qwerfghj_acs_x"></td><td class="qwerfghj_acs_y"></td></tr></table></div>').setDraggable(true).setBlockGame(false);
                d.addButton("cancel", function() {
                    removePreviewIfNot(-1);
                    return true;
                });
                var el = function(cls) { return $(".qwerfghj_acs_" + cls, d.getMainDiv()); };
                d.addButton("ok", function() {
                    var item_id = parseInt(el("id").val());
                    if (item_id == 0) {
                        new MessageError("Item is not selected!").show();
                        return false;
                    }
                    if (x.getValue() === "" || y.getValue() === "") {
                        new MessageError("Position is not set!").show();
                        return false;
                    }
                    removePreviewIfNot(-1);
                    that.set(item_id, [parseInt(x.getValue()), parseInt(y.getValue())]);
                    new MessageSuccess("Item added!").show();
                    return true;
                });

                new tw2widget.InventoryItem(ItemManager.get(init_id)).getMainDiv().appendTo(el("item"));

                if (init_id != 0) {
                    id.setValue(init_id);
                }

                var updatePreview = function() {
                    var item_id = parseInt(el("id").val());
                    if (item_id == 0 || x.getValue() === "" || y.getValue() === "") return;
                    removePreviewIfNot(item_id);
                    if (preview_item == null) {
                        preview_item = new tw2widget.InventoryItem(ItemManager.get(item_id));
                        preview_item.getMainDiv().css("z-index", 1);
                        preview_item.getMainDiv().css("position", "absolute");
                        preview_item.getMainDiv().append($('<span class="cooldown" style="display: inline">Preview</span>'));
                        preview_item.getMainDiv().appendTo(document.body);
                    }

                    preview_item.getMainDiv().css("left", x.getValue() + "px");
                    preview_item.getMainDiv().css("top", y.getValue() + "px");
                };

                id.addKeyUpListener(function() {
                    try {
                        var value = parseInt(id.getValue().replace(/\[item=(\d+)\]/, "$1"));
                        var item = ItemManager.get(value);
                        if (item) {
                            el("item").empty();
                            new tw2widget.InventoryItem(item).getMainDiv().appendTo(el("item"));
                            el("id").val(value);
                            updatePreview();
                        }
                    }
                    catch (e) { }
                });
                x.getField().add(y.getField()).attr("min", 0).on("input", updatePreview);

                id.getMainDiv().appendTo(el("item_id"));
                x.getMainDiv().appendTo(el("x"));
                y.getMainDiv().appendTo(el("y"));

                d.show();
                updatePreview();
            },
            change: function(item_id) {
                var pos = this.getItems()[item_id] || ["", ""];
                this.createEditDialog(item_id, pos[0], pos[1]);
            },
            set: function(item_id, position) {
                var items = this.getItems();
                items[item_id] = position;
                this.saveItems(items);
            },
            remove: function(item_id) {
                var dialog = new west.gui.Dialog(scriptName, "Do you really want to remove " + AccessibleItems.helpers.item_name(item_id) + "?", west.gui.Dialog.SYS_QUESTION), that = this;
                dialog.addButton("yes", function() {
                    var items = that.getItems();
                    delete items[item_id];
                    that.saveItems(items);
                    return true;
                });
                dialog.addButton("cancel").show();
            }
        },
        storage: {
            add: function(name, value) {
                localStorage.setItem("EnergyBag_" + name, JSON.stringify(value));
            },
            get: function(name) {
                if (!this.exists(name)) {
                    console.log("Storage contains no value for name: " + name);
                    return null;
                }
                return JSON.parse(localStorage.getItem("EnergyBag_" + name));
            },
            exists: function(name) {
                return localStorage.getItem("EnergyBag_" + name) !== null;
            }
        },
        script: {
			api: null,
			listeningSignal: 'game_config_loaded',
			init: function() {
                var that = this;
				if(!!(Game && Game.loaded)) {
					this.api = TheWestApi.register(scriptObject, scriptName, "2.82", Game.version.toString(), scriptAuthor, scriptURL);

                    AccessibleItems.settings.init();

                    if (!!(ItemManager && ItemManager.isLoaded())) {
                        AccessibleItems.inventoryManager.init();
                        this.fillGui();
                    }
                    else {
                        EventHandler.listen("itemmanager_loaded", function() {
                            AccessibleItems.inventoryManager.init();
                            that.fillGui();
                            return EventHandler.ONE_TIME_EVENT;
                        });
                    }

				}
                else {
                    EventHandler.listen(this.listeningSignal, function() {
                        that.init();
                        return EventHandler.ONE_TIME_EVENT;
                    });
                }
			},
            fillGui: function() {
                var html = '<p style="margin: 8px; margin-left: 16px; font-size: 18px;">Items to display:</p>';
                $.each(AccessibleItems.settings.getItems(), function(item_id, position) {
                    html += '<p style="margin: 8px; font-size: 16px;">';
                    html += Game.TextHandler.parse("[item=" + item_id + "]");
                    html += " at position [" + position + "]";
                    html += ' <a href="javascript:AccessibleItems.settings.change(' + item_id + ')">(change)</a>';
                    html += ' <a href="javascript:AccessibleItems.settings.remove(' + item_id + ')">[remove]</a>.';
                    html += "</p>";
                });
                html += '<div class="tw2gui_button" onclick="javascript:AccessibleItems.settings.add()" style="margin-left: 16px; margin-top: 16px;"><div class="tw2gui_button_right_cap"></div><div class="tw2gui_button_left_cap"></div><div class="tw2gui_button_middle_bg"></div><div class="textart_title">Add new item</div></div>';

                this.api.setGui(html);

                var script_window = wman.getById("scripts");
                if (script_window) {
                    if (script_window.currentActiveTabId == scriptObject) {
                        script_window.fireActivateTab(scriptObject);
                    }
                }
            }
		}
	};
	$(function() { try { AccessibleItems.script.init(); } catch(x) { console.trace(x); } });
});