The West - NERD Portrait

Displays some useful info on the portrait

当前为 2015-05-16 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @namespace https://gf.qytechs.cn/users/8637
  3. // @name The West - NERD Portrait
  4. // @author neversleep1911
  5. // @description Displays some useful info on the portrait
  6. // @include http://*.the-west.*/game.php*
  7. // @include https://*.the-west.*/game.php*
  8. // @grant none
  9. // @version 1.0.1
  10. // @copyright Copyright (c) 2015 neversleep1911
  11. // @license MIT (http://opensource.org/licenses/MIT)
  12. // ==/UserScript==
  13.  
  14. (function(func) {
  15. var script;
  16. script = document.createElement("script");
  17. script.setAttribute("type", "text/javascript");
  18. script.textContent = "(" + func.toString() + ")();";
  19. document.body.appendChild(script);
  20. document.body.removeChild(script);
  21. })(function() {
  22. var Gui, I18n, NerdFormatter, NerdPortrait, Tab;
  23. I18n = function() {
  24. function I18n() {}
  25. var DEFAULT_LANGUAGE, STRINGS, language;
  26. DEFAULT_LANGUAGE = "en_US";
  27. STRINGS = {
  28. en_US: {
  29. buttons: {
  30. save: "Save"
  31. },
  32. messages: {
  33. text_saved: "Text saved",
  34. enter_text: "Enter text!"
  35. }
  36. },
  37. ru_RU: {
  38. buttons: {
  39. save: "Сохранить"
  40. },
  41. messages: {
  42. text_saved: "Текст сохранён",
  43. enter_text: "Введите текст!"
  44. }
  45. }
  46. };
  47. language = DEFAULT_LANGUAGE;
  48. I18n.language = function() {
  49. return language;
  50. };
  51. I18n.setLanguage = function(lang) {
  52. return language = STRINGS[lang] ? lang : DEFAULT_LANGUAGE;
  53. };
  54. I18n.tr = function(id) {
  55. var i, len, prop, properties, string;
  56. string = STRINGS[language];
  57. properties = id.split(".");
  58. for (i = 0, len = properties.length; i < len; i++) {
  59. prop = properties[i];
  60. if ((string = string[prop]) === void 0) {
  61. break;
  62. }
  63. }
  64. return string || id;
  65. };
  66. return I18n;
  67. }();
  68. Gui = function() {
  69. function Gui() {}
  70. Gui.createButton = function(options) {
  71. var button;
  72. if (options == null) {
  73. options = {};
  74. }
  75. if (options.icon) {
  76. button = new west.gui.Iconbutton(options.icon, options.onclick);
  77. } else {
  78. button = new west.gui.Button(options.text, options.onclick);
  79. }
  80. if (options.css) {
  81. $(button.getMainDiv()).css(options.css);
  82. }
  83. return button;
  84. };
  85. Gui.createTextarea = function(options) {
  86. var textarea;
  87. if (options == null) {
  88. options = {};
  89. }
  90. textarea = new west.gui.Textarea(options.content, null);
  91. if (options.width) {
  92. textarea.setWidth(options.width);
  93. }
  94. if (options.height) {
  95. textarea.setHeight(options.height);
  96. }
  97. if (options.css) {
  98. $(textarea.getMainDiv()).css(options.css);
  99. }
  100. return textarea;
  101. };
  102. Gui.createGroup = function(options) {
  103. var content, group, scrollPane;
  104. if (options == null) {
  105. options = {};
  106. }
  107. group = new west.gui.Groupframe("", "<div />");
  108. if (options.css) {
  109. $(group.getMainDiv()).css(options.css);
  110. }
  111. content = $(".tw2gui_groupframe_content_pane div", group.getMainDiv()).first();
  112. if (options.title) {
  113. content.append($("<h2>" + options.title + "</h2><hr style='margin-top: 2px; margin-bottom: 4px;' />"));
  114. }
  115. if (options.scrollPane) {
  116. scrollPane = new west.gui.Scrollpane;
  117. if (options.scrollPane.css) {
  118. $(scrollPane.getMainDiv()).css(options.scrollPane.css);
  119. }
  120. content.append(scrollPane.getMainDiv());
  121. group.scrollPane = scrollPane;
  122. group.appendToScrollContentPane = function(content) {
  123. scrollPane.appendContent(content);
  124. return group;
  125. };
  126. }
  127. return group;
  128. };
  129. return Gui;
  130. }();
  131. NerdFormatter = function() {
  132. function NerdFormatter() {}
  133. NerdFormatter.keys = [ {
  134. pattern: /%ch/,
  135. value: function() {
  136. return Character.healthRegen;
  137. }
  138. }, {
  139. pattern: /%ce/,
  140. value: function() {
  141. return Character.energyRegen;
  142. }
  143. }, {
  144. pattern: /%hp/,
  145. value: function() {
  146. return Math.round(Character.health * 100 / Character.maxHealth);
  147. }
  148. }, {
  149. pattern: /%hr/,
  150. value: function() {
  151. return Math.round(1 / (Character.healthRegen * Character.maxHealth) * 3600).formatDuration();
  152. }
  153. }, {
  154. pattern: /%ht/,
  155. value: function() {
  156. return ((Character.maxHealth - Character.health) / (Character.healthRegen * Character.maxHealth) * 3600).formatDuration();
  157. }
  158. }, {
  159. pattern: /%ep/,
  160. value: function() {
  161. return Math.round(Character.energy * 100 / Character.maxEnergy);
  162. }
  163. }, {
  164. pattern: /%er/,
  165. value: function() {
  166. return Math.round(1 / (Character.healthRegen * Character.maxEnergy) * 3600).formatDuration();
  167. }
  168. }, {
  169. pattern: /%et/,
  170. value: function() {
  171. return ((Character.maxEnergy - Character.energy) / (Character.energyRegen * Character.maxEnergy) * 3600).formatDuration();
  172. }
  173. }, {
  174. pattern: /%dl/,
  175. value: function() {
  176. return Character.duelLevel;
  177. }
  178. }, {
  179. pattern: /%dm/,
  180. value: function() {
  181. return Math.ceil(5 * Character.duelLevel / 7);
  182. }
  183. }, {
  184. pattern: /%dx/,
  185. value: function() {
  186. return Math.ceil(7 * Character.duelLevel / 5);
  187. }
  188. } ];
  189. NerdFormatter.format = function(s) {
  190. var i, k, len, ref;
  191. ref = this.keys;
  192. for (i = 0, len = ref.length; i < len; i++) {
  193. k = ref[i];
  194. s = s.replace(k.pattern, k.value());
  195. }
  196. return s;
  197. };
  198. return NerdFormatter;
  199. }();
  200. NerdPortrait = function() {
  201. function NerdPortrait() {
  202. if (instance) {
  203. return instance;
  204. }
  205. instance = this;
  206. EventHandler.listen([ "health", "energy", "wear_changed", "taskqueue-updated", "position_change", "character_level_up" ], function() {
  207. NerdPortrait.instance().update();
  208. });
  209. this.update();
  210. return;
  211. }
  212. var instance;
  213. NerdPortrait.ID = "tw_nerd_portrait";
  214. NerdPortrait.NAME = "NERD Portrait";
  215. NerdPortrait.AUTHOR = "neversleep1911";
  216. NerdPortrait.WEB_SITE = "https://gf.qytechs.cn/scripts/9505";
  217. NerdPortrait.MIN_GAME_VERSION = "2.22";
  218. NerdPortrait.MAX_GAME_VERSION = Game.version.toString();
  219. NerdPortrait.LSK_TEXT = "3577cb3d-1fbf-4c37-9b6a-3854a6c4c34d";
  220. 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>";
  221. instance = null;
  222. NerdPortrait.instance = function() {
  223. return instance;
  224. };
  225. NerdPortrait.prototype.update = function() {
  226. if (!this.content) {
  227. $("div.character_link").append(this.content = $("<div />"));
  228. }
  229. this.content.html(NerdFormatter.format(this.text()));
  230. };
  231. NerdPortrait.prototype.text = function() {
  232. return this._text || (this._text = localStorage.getItem(NerdPortrait.LSK_TEXT)) || NerdPortrait.DEFAULT_TEXT;
  233. };
  234. NerdPortrait.prototype.setText = function(_text) {
  235. this._text = _text;
  236. localStorage.setItem(NerdPortrait.LSK_TEXT, this._text);
  237. this.update();
  238. };
  239. return NerdPortrait;
  240. }();
  241. Tab = function() {
  242. function Tab() {
  243. if (instance) {
  244. return instance;
  245. }
  246. instance = this;
  247. this.maindiv = $("<div />");
  248. this.maindiv.append((this.textGroup = Gui.createGroup()).getMainDiv());
  249. this.maindiv.append((this.actionGroup = Gui.createGroup()).getMainDiv());
  250. this.textGroup.appendToContentPane((this.text = Gui.createTextarea({
  251. width: 598,
  252. height: 205
  253. })).getMainDiv());
  254. this.actionGroup.appendToContentPane((this.buttonSave = Gui.createButton({
  255. text: I18n.tr("buttons.save")
  256. })).getMainDiv());
  257. EventHandler.listen("WINDOW_OPENED", function(uid) {
  258. if (uid !== "scripts") {
  259. return;
  260. }
  261. Tab.instance().text.setContent(NerdPortrait.instance().text());
  262. $(Tab.instance().buttonSave.getMainDiv()).off("click").on("click", function() {
  263. var e, text;
  264. text = $.trim(Tab.instance().text.getContent());
  265. if (text !== "") {
  266. try {
  267. NerdPortrait.instance().setText(text);
  268. (new UserMessage(I18n.tr("messages.text_saved"), UserMessage.TYPE_SUCCESS)).show();
  269. } catch (_error) {
  270. e = _error;
  271. (new UserMessage(e, UserMessage.TYPE_ERROR)).show();
  272. }
  273. } else {
  274. (new UserMessage(I18n.tr("messages.enter_text"), UserMessage.TYPE_HINT)).show();
  275. }
  276. return false;
  277. });
  278. });
  279. }
  280. var instance;
  281. instance = null;
  282. Tab.instance = function() {
  283. return instance;
  284. };
  285. return Tab;
  286. }();
  287. $(document).ready(function() {
  288. var api;
  289. I18n.setLanguage(Game.locale);
  290. api = TheWestApi.register(NerdPortrait.ID, NerdPortrait.NAME, NerdPortrait.MIN_GAME_VERSION, NerdPortrait.MAX_GAME_VERSION, NerdPortrait.AUTHOR, NerdPortrait.WEB_SITE);
  291. api.setGui((new Tab).maindiv);
  292. new NerdPortrait;
  293. return true;
  294. });
  295. });

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址