The West - NERD Portrait

Displays some useful info on the portrait

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @namespace		https://greasyfork.org/users/8637
// @name        	The West - NERD Portrait
// @author      	neversleep1911
// @description		Displays some useful info on the portrait
// @include     	http://*.the-west.*/game.php*
// @include     	https://*.the-west.*/game.php*
// @grant       	none
// @version     	1.0.2
// @copyright		Copyright (c) 2015 neversleep1911
// @license			MIT (http://opensource.org/licenses/MIT)
// ==/UserScript==

(function(func) {
    var script;
    script = document.createElement("script");
    script.setAttribute("type", "text/javascript");
    script.textContent = "(" + func.toString() + ")();";
    document.body.appendChild(script);
    document.body.removeChild(script);
})(function() {
    var Gui, I18n, NerdFormatter, NerdPortrait, Tab;
    I18n = function() {
        function I18n() {}
        var DEFAULT_LANGUAGE, STRINGS, language;
        DEFAULT_LANGUAGE = "en_US";
        STRINGS = {
            en_US: {
                buttons: {
                    save: "Save"
                },
                messages: {
                    text_saved: "Text saved",
                    enter_text: "Enter text!"
                }
            },
            de_DE: {
                buttons: {
                    save: "Speichern"
                },
                messages: {
                    text_saved: "Text gespeichert",
                    enter_text: "Text eingeben!"
                }
            },
            ru_RU: {
                buttons: {
                    save: "Сохранить"
                },
                messages: {
                    text_saved: "Текст сохранён",
                    enter_text: "Введите текст!"
                }
            }
        };
        language = DEFAULT_LANGUAGE;
        I18n.language = function() {
            return language;
        };
        I18n.setLanguage = function(lang) {
            return language = STRINGS[lang] ? lang : DEFAULT_LANGUAGE;
        };
        I18n.tr = function(id) {
            var i, len, prop, properties, string;
            string = STRINGS[language];
            properties = id.split(".");
            for (i = 0, len = properties.length; i < len; i++) {
                prop = properties[i];
                if ((string = string[prop]) === void 0) {
                    break;
                }
            }
            return string || id;
        };
        return I18n;
    }();
    Gui = function() {
        function Gui() {}
        Gui.createButton = function(options) {
            var button;
            if (options == null) {
                options = {};
            }
            if (options.icon) {
                button = new west.gui.Iconbutton(options.icon, options.onclick);
            } else {
                button = new west.gui.Button(options.text, options.onclick);
            }
            if (options.css) {
                $(button.getMainDiv()).css(options.css);
            }
            return button;
        };
        Gui.createTextarea = function(options) {
            var textarea;
            if (options == null) {
                options = {};
            }
            textarea = new west.gui.Textarea(options.content, null);
            if (options.width) {
                textarea.setWidth(options.width);
            }
            if (options.height) {
                textarea.setHeight(options.height);
            }
            if (options.css) {
                $(textarea.getMainDiv()).css(options.css);
            }
            return textarea;
        };
        Gui.createGroup = function(options) {
            var content, group, scrollPane;
            if (options == null) {
                options = {};
            }
            group = new west.gui.Groupframe("", "<div />");
            if (options.css) {
                $(group.getMainDiv()).css(options.css);
            }
            content = $(".tw2gui_groupframe_content_pane div", group.getMainDiv()).first();
            if (options.title) {
                content.append($("<h2>" + options.title + "</h2><hr style='margin-top: 2px; margin-bottom: 4px;' />"));
            }
            if (options.scrollPane) {
                scrollPane = new west.gui.Scrollpane;
                if (options.scrollPane.css) {
                    $(scrollPane.getMainDiv()).css(options.scrollPane.css);
                }
                content.append(scrollPane.getMainDiv());
                group.scrollPane = scrollPane;
                group.appendToScrollContentPane = function(content) {
                    scrollPane.appendContent(content);
                    return group;
                };
            }
            return group;
        };
        return Gui;
    }();
    NerdFormatter = function() {
        function NerdFormatter() {}
        NerdFormatter.keys = [ {
            pattern: /%ch/,
            value: function() {
                return Character.healthRegen;
            }
        }, {
            pattern: /%ce/,
            value: function() {
                return Character.energyRegen;
            }
        }, {
            pattern: /%hp/,
            value: function() {
                return Math.round(Character.health * 100 / Character.maxHealth);
            }
        }, {
            pattern: /%hr/,
            value: function() {
                return Math.round(1 / (Character.healthRegen * Character.maxHealth) * 3600).formatDuration();
            }
        }, {
            pattern: /%ht/,
            value: function() {
                return ((Character.maxHealth - Character.health) / (Character.healthRegen * Character.maxHealth) * 3600).formatDuration();
            }
        }, {
            pattern: /%ep/,
            value: function() {
                return Math.round(Character.energy * 100 / Character.maxEnergy);
            }
        }, {
            pattern: /%er/,
            value: function() {
                return Math.round(1 / (Character.healthRegen * Character.maxEnergy) * 3600).formatDuration();
            }
        }, {
            pattern: /%et/,
            value: function() {
                return ((Character.maxEnergy - Character.energy) / (Character.energyRegen * Character.maxEnergy) * 3600).formatDuration();
            }
        }, {
            pattern: /%dl/,
            value: function() {
                return Character.duelLevel;
            }
        }, {
            pattern: /%dm/,
            value: function() {
                return Math.ceil(5 * Character.duelLevel / 7);
            }
        }, {
            pattern: /%dx/,
            value: function() {
                return Math.ceil(7 * Character.duelLevel / 5);
            }
        } ];
        NerdFormatter.format = function(s) {
            var i, k, len, ref;
            ref = this.keys;
            for (i = 0, len = ref.length; i < len; i++) {
                k = ref[i];
                s = s.replace(k.pattern, k.value());
            }
            return s;
        };
        return NerdFormatter;
    }();
    NerdPortrait = function() {
        function NerdPortrait() {
            if (instance) {
                return instance;
            }
            instance = this;
            EventHandler.listen([ "health", "energy", "wear_changed", "taskqueue-updated", "position_change", "character_level_up" ], function() {
                NerdPortrait.instance().update();
            });
            this.update();
            return;
        }
        var instance;
        NerdPortrait.ID = "tw_nerd_portrait";
        NerdPortrait.NAME = "NERD Portrait";
        NerdPortrait.AUTHOR = "neversleep1911";
        NerdPortrait.WEB_SITE = "https://greasyfork.org/scripts/9505";
        NerdPortrait.MIN_GAME_VERSION = "2.22";
        NerdPortrait.MAX_GAME_VERSION = Game.version.toString();
        NerdPortrait.LSK_TEXT = "3577cb3d-1fbf-4c37-9b6a-3854a6c4c34d";
        NerdPortrait.DEFAULT_TEXT = '<div style="color: whitesmoke; position: relative; left: 10px; top: 5px; font-size: 75%; font-weight: bold; line-height: 110%;">\n' + "Health: %hp%<br />\n" + "Regen: %ch (%ht)<br />\n" + "1HP / %hr<br /><br />\n\n" + "Energy: %ep%<br />\n" + "Regen: %ce (%et)<br />\n" + "1EP / %er<br /><br />\n\n" + "Duel Level: %dl (%dm-%dx)" + "</div>";
        instance = null;
        NerdPortrait.instance = function() {
            return instance;
        };
        NerdPortrait.prototype.update = function() {
            if (!this.content) {
                $("div.character_link").append(this.content = $("<div />"));
            }
            this.content.html(NerdFormatter.format(this.text()));
        };
        NerdPortrait.prototype.text = function() {
            return this._text || (this._text = localStorage.getItem(NerdPortrait.LSK_TEXT)) || NerdPortrait.DEFAULT_TEXT;
        };
        NerdPortrait.prototype.setText = function(_text) {
            this._text = _text;
            localStorage.setItem(NerdPortrait.LSK_TEXT, this._text);
            this.update();
        };
        return NerdPortrait;
    }();
    Tab = function() {
        function Tab() {
            if (instance) {
                return instance;
            }
            instance = this;
            this.maindiv = $("<div />");
            this.maindiv.append((this.textGroup = Gui.createGroup()).getMainDiv());
            this.maindiv.append((this.actionGroup = Gui.createGroup()).getMainDiv());
            this.textGroup.appendToContentPane((this.text = Gui.createTextarea({
                width: 598,
                height: 205
            })).getMainDiv());
            this.actionGroup.appendToContentPane((this.buttonSave = Gui.createButton({
                text: I18n.tr("buttons.save")
            })).getMainDiv());
            EventHandler.listen("WINDOW_OPENED", function(uid) {
                if (uid !== "scripts") {
                    return;
                }
                Tab.instance().text.setContent(NerdPortrait.instance().text());
                $(Tab.instance().buttonSave.getMainDiv()).off("click").on("click", function() {
                    var e, text;
                    text = $.trim(Tab.instance().text.getContent());
                    if (text !== "") {
                        try {
                            NerdPortrait.instance().setText(text);
                            (new UserMessage(I18n.tr("messages.text_saved"), UserMessage.TYPE_SUCCESS)).show();
                        } catch (_error) {
                            e = _error;
                            (new UserMessage(e, UserMessage.TYPE_ERROR)).show();
                        }
                    } else {
                        (new UserMessage(I18n.tr("messages.enter_text"), UserMessage.TYPE_HINT)).show();
                    }
                    return false;
                });
            });
        }
        var instance;
        instance = null;
        Tab.instance = function() {
            return instance;
        };
        return Tab;
    }();
    $(document).ready(function() {
        var api;
        I18n.setLanguage(Game.locale);
        api = TheWestApi.register(NerdPortrait.ID, NerdPortrait.NAME, NerdPortrait.MIN_GAME_VERSION, NerdPortrait.MAX_GAME_VERSION, NerdPortrait.AUTHOR, NerdPortrait.WEB_SITE);
        api.setGui((new Tab).maindiv);
        new NerdPortrait;
        return true;
    });
});