The Tale Extended

Расширение базового функционала в браузерной игре Сказка

  1. // ==UserScript==
  2. // @name The Tale Extended
  3. // @description Расширение базового функционала в браузерной игре Сказка
  4. // @author standy <mostovoyav@gmail.com>
  5. // @version 0.5.4
  6. // @include /^https?://the-tale.org/game/
  7. // @run-at document-end
  8. // @license MIT License
  9. // @namespace the-tale-extended
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13.  
  14. var ext =
  15. /******/ (function(modules) { // webpackBootstrap
  16. /******/ // The module cache
  17. /******/ var installedModules = {};
  18. /******/
  19. /******/ // The require function
  20. /******/ function __webpack_require__(moduleId) {
  21. /******/
  22. /******/ // Check if module is in cache
  23. /******/ if(installedModules[moduleId]) {
  24. /******/ return installedModules[moduleId].exports;
  25. /******/ }
  26. /******/ // Create a new module (and put it into the cache)
  27. /******/ var module = installedModules[moduleId] = {
  28. /******/ i: moduleId,
  29. /******/ l: false,
  30. /******/ exports: {}
  31. /******/ };
  32. /******/
  33. /******/ // Execute the module function
  34. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  35. /******/
  36. /******/ // Flag the module as loaded
  37. /******/ module.l = true;
  38. /******/
  39. /******/ // Return the exports of the module
  40. /******/ return module.exports;
  41. /******/ }
  42. /******/
  43. /******/
  44. /******/ // expose the modules object (__webpack_modules__)
  45. /******/ __webpack_require__.m = modules;
  46. /******/
  47. /******/ // expose the module cache
  48. /******/ __webpack_require__.c = installedModules;
  49. /******/
  50. /******/ // define getter function for harmony exports
  51. /******/ __webpack_require__.d = function(exports, name, getter) {
  52. /******/ if(!__webpack_require__.o(exports, name)) {
  53. /******/ Object.defineProperty(exports, name, {
  54. /******/ configurable: false,
  55. /******/ enumerable: true,
  56. /******/ get: getter
  57. /******/ });
  58. /******/ }
  59. /******/ };
  60. /******/
  61. /******/ // getDefaultExport function for compatibility with non-harmony modules
  62. /******/ __webpack_require__.n = function(module) {
  63. /******/ var getter = module && module.__esModule ?
  64. /******/ function getDefault() { return module['default']; } :
  65. /******/ function getModuleExports() { return module; };
  66. /******/ __webpack_require__.d(getter, 'a', getter);
  67. /******/ return getter;
  68. /******/ };
  69. /******/
  70. /******/ // Object.prototype.hasOwnProperty.call
  71. /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  72. /******/
  73. /******/ // __webpack_public_path__
  74. /******/ __webpack_require__.p = "";
  75. /******/
  76. /******/ // Load entry module and return exports
  77. /******/ return __webpack_require__(__webpack_require__.s = 0);
  78. /******/ })
  79. /************************************************************************/
  80. /******/ ([
  81. /* 0 */
  82. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  83.  
  84. "use strict";
  85. Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
  86.  
  87. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/utils/EventEmitter.ts
  88. ///<reference path="../typings.d.ts"/>
  89. function EventEmitter() {
  90. const callbacks = [];
  91. const emitter = (callback => {
  92. callbacks.push(callback);
  93. });
  94. emitter.emit = arg => {
  95. for (let i = 0; i < callbacks.length; i++) {
  96. const callback = callbacks[i];
  97. callback(arg);
  98. }
  99. };
  100. return emitter;
  101. }
  102. /* harmony default export */ var EventEmitter_defaultExport = (EventEmitter);
  103.  
  104. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/tabs/tabs.ts
  105.  
  106. const tabs_$root = $('#pgf-diary-container').parent().parent();
  107. const $navTabs = tabs_$root.children('.nav-tabs');
  108. const $tabContent = tabs_$root.children('.tab-content');
  109. const tabs_$tab = $(`<li><a href="#pgf-ext-container" class="pgf-ext-tab-button" data-toggle="tab">e</a></li>`).prependTo($navTabs);
  110. const $container = $(`<div class="tab-pane log-block ext-container" id="pgf-ext-container">
  111. <div class="ext-tabs"></div>
  112. </div>`).appendTo($tabContent);
  113. tabs_$tab.addClass('active').siblings().removeClass('active');
  114. $container.addClass('active').siblings().removeClass('active');
  115. const $extTabs = $container.find('.ext-tabs');
  116. const tabs = [];
  117. function createTab(title) {
  118. const $tab = $(`<span class="ext-tab">${title}</span>`).appendTo($extTabs);
  119. const $content = $(`<div class="ext-content"></div>`).appendTo($container);
  120. const tab = {
  121. $tab: $tab,
  122. $content: $content,
  123. onTabChange: EventEmitter_defaultExport(),
  124. };
  125. tabs.push(tab);
  126. $tab.on('click', () => {
  127. toggleTab(tab);
  128. });
  129. if (tabs.length === 1)
  130. toggleTab(tab);
  131. return tab;
  132. }
  133. function toggleTab(tab) {
  134. tabs.forEach(t => {
  135. const isActive = t === tab;
  136. t.onTabChange.emit(isActive);
  137. t.$content.toggleClass('active', isActive);
  138. t.$tab.toggleClass('active', isActive);
  139. });
  140. }
  141.  
  142.  
  143. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/utils/clientStorage.ts
  144. ///<reference path="../typings.d.ts"/>
  145. function set(name, messages) {
  146. try {
  147. pgf.base.settings.set(name, JSON.stringify(messages));
  148. }
  149. catch (e) {
  150. console.warn('setLog', name, e);
  151. }
  152. }
  153. function get(name) {
  154. const g = pgf.base.settings.get(name);
  155. return g ? JSON.parse(g) : null;
  156. }
  157. function remove(name) {
  158. if (!window.localStorage)
  159. return;
  160. localStorage.removeItem(pgf.base.settings._prefix + '_' + name);
  161. }
  162. function size() {
  163. let t = 0;
  164. for (const x in localStorage) {
  165. if (localStorage.hasOwnProperty(x)) {
  166. t += localStorage[x].length * 2;
  167. }
  168. }
  169. return t;
  170. }
  171. /* harmony default export */ var clientStorage_defaultExport = ({
  172. remove,
  173. set,
  174. get,
  175. size,
  176. });
  177.  
  178. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/tabs/settings/sets-auto.ts
  179. const setsAuto = [{
  180. title: 'Помощь герою (<span class="link-ajax" data-auto="rest">миролюбие</span>/<span class="link-ajax" data-auto="fight">агрессия</span>)',
  181. fields: [{
  182. label: 'Автоматическая помощь',
  183. note: 'Внимание! Настройки применяются в момент нажатия',
  184. name: 'autohelp',
  185. isToggle: true,
  186. value: false,
  187. subs: [{
  188. label: 'Уведомлять о помощи',
  189. name: 'autohelpNotify',
  190. isToggle: true,
  191. value: false,
  192. }, {
  193. label: 'Использовать бонусную энергию, оставить',
  194. note: 'Указанный запас энергии тратиться не будет',
  195. name: 'autohelpEnergyBonus',
  196. isToggle: true,
  197. value: false,
  198. inputs: [{
  199. name: 'autohelpEnergyBonusMax',
  200. type: 'num',
  201. value: 0,
  202. }],
  203. }, {
  204. label: 'Герой бездействует',
  205. name: 'autohelpIdle',
  206. isToggle: true,
  207. value: true,
  208. }, {
  209. label: 'Герой воскресает',
  210. name: 'autohelpDead',
  211. isToggle: true,
  212. value: true,
  213. }, {
  214. label: 'Здоровье в бою ниже ',
  215. name: 'autohelpHp',
  216. isToggle: true,
  217. value: true,
  218. inputs: [{
  219. type: 'num',
  220. name: 'autohelpHpLowerValue',
  221. value: 200,
  222. }],
  223. subs: [{
  224. label: 'только против босса',
  225. name: 'autohelpHpBoss',
  226. isToggle: true,
  227. isInline: true,
  228. value: true,
  229. }],
  230. }, {
  231. label: 'Лечение спутника, если его здоровье меньше',
  232. name: 'autohelpCompanion',
  233. isToggle: true,
  234. isInline: true,
  235. value: true,
  236. inputs: [{
  237. type: 'num',
  238. name: 'autohelpCompanionHp',
  239. isInline: true,
  240. value: 20,
  241. }],
  242. }, {
  243. label: 'Энергия выше ',
  244. name: 'autohelpEnergy',
  245. isToggle: true,
  246. value: true,
  247. inputs: [{
  248. type: 'num',
  249. name: 'autohelpEnergyGreaterValue',
  250. value: 10,
  251. }],
  252. subs: [{
  253. label: 'в бою',
  254. name: 'autohelpEnergyFight',
  255. isToggle: true,
  256. isInline: true,
  257. value: false,
  258. }, {
  259. label: 'вне боя',
  260. name: 'autohelpEnergyRest',
  261. isToggle: true,
  262. isInline: true,
  263. value: false,
  264. }, {
  265. label: 'в пути',
  266. name: 'autohelpEnergyWalk',
  267. isToggle: true,
  268. isInline: true,
  269. value: true,
  270. }, {
  271. label: 'торг/медитация',
  272. name: 'autohelpEnergyTradeMed',
  273. isToggle: true,
  274. isInline: true,
  275. value: true,
  276. },
  277. ],
  278. }],
  279. }, {
  280. label: 'Автоматический выбор в задании',
  281. name: 'autoquest',
  282. isToggle: true,
  283. value: false,
  284. subs: [{
  285. label: 'Уведомлять о выборе',
  286. name: 'autoquestNotify',
  287. isToggle: true,
  288. value: false,
  289. }, {
  290. label: 'Задания, влияющие на честь',
  291. // note: 'Доставка, сопроводить караван, пошпионить',
  292. name: 'autoquestHonor',
  293. isToggle: true,
  294. value: true,
  295. subs: [{
  296. label: 'честно',
  297. name: 'autoquestHonorPlus',
  298. isToggle: true,
  299. isInline: true,
  300. value: true,
  301. }, {
  302. label: 'бесчестно',
  303. name: 'autoquestHonorMinus',
  304. isToggle: true,
  305. isInline: true,
  306. value: false,
  307. }],
  308. }, {
  309. label: 'Задания, влияющие на миролюбие',
  310. // note: 'Выбить долг',
  311. name: 'autoquestPeace',
  312. isToggle: true,
  313. value: true,
  314. subs: [{
  315. label: 'миролюбиво',
  316. name: 'autoquestPeacePlus',
  317. isToggle: true,
  318. isInline: true,
  319. value: true,
  320. }, {
  321. label: 'воинственно',
  322. name: 'autoquestPeaceMinus',
  323. isToggle: true,
  324. isInline: true,
  325. value: false,
  326. }],
  327. }],
  328. }, {
  329. label: 'Брать карты',
  330. name: 'autocard',
  331. isToggle: true,
  332. value: false,
  333. }],
  334. }];
  335.  
  336. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/tabs/settings/sets-game.ts
  337. const MAX_LOG_LENGTH = 100000;
  338. const setsGame = [
  339. {
  340. title: 'Уведомления',
  341. fields: [{
  342. label: 'Отправлять уведомления (<span class="link-ajax" id="test-notifications">тест</span>)',
  343. name: 'notify',
  344. isToggle: true,
  345. value: true,
  346. subs: [{
  347. label: 'Выбор в задании',
  348. name: 'notifyQuestChoose',
  349. isToggle: true,
  350. value: true,
  351. }, {
  352. label: 'Герой бездействует',
  353. name: 'notifyHeroIdle',
  354. isToggle: true,
  355. value: true,
  356. }, {
  357. label: 'Здоровье ниже ',
  358. name: 'notifyHeroHp',
  359. isToggle: true,
  360. value: true,
  361. inputs: [{
  362. type: 'num',
  363. name: 'notifyHeroHpLowerValue',
  364. value: 200,
  365. }],
  366. }, {
  367. label: 'Энергия выше ',
  368. name: 'notifyHeroEnergy',
  369. isToggle: true,
  370. value: true,
  371. inputs: [{
  372. type: 'num',
  373. name: 'notifyHeroEnergyGreaterValue',
  374. value: 9,
  375. }],
  376. }],
  377. }],
  378. },
  379. {
  380. title: 'Отображение',
  381. fields: [{
  382. label: 'Использовать глобальные стили расширения',
  383. name: 'extHtml',
  384. isToggle: true,
  385. value: true,
  386. }],
  387. },
  388. {
  389. title: 'Хранилище <span id="storage-size"></span>',
  390. fields: [{
  391. label: 'Сохранять последние сообщения:',
  392. name: '',
  393. inputs: [{
  394. name: 'maxLogLength',
  395. type: 'num',
  396. value: MAX_LOG_LENGTH,
  397. }],
  398. }, {
  399. name: '',
  400. label: '<span class="link-ajax" id="reset-stats">Очистить хранилище</span>',
  401. }],
  402. },
  403. ];
  404.  
  405. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/notifications/sendNotify.ts
  406. $('body').one('click', request);
  407. function request() {
  408. const Notify = Notification;
  409. if (Notify.permission.toLowerCase() !== 'granted') {
  410. Notify.requestPermission().then((permission) => {
  411. if (permission !== 'granted')
  412. return;
  413. Notify('Thanks for letting notify you');
  414. });
  415. }
  416. }
  417. function generateRandomString() {
  418. return Math.random().toString(36).slice(2);
  419. }
  420. let rndStr = generateRandomString();
  421. function sendNotify(name, options) {
  422. const d = new Date();
  423. const h = d.getHours();
  424. const m = d.getMinutes();
  425. const time = `${h}:${m < 10 ? '0' + m : m}`;
  426. const nt = new Notification(name, {
  427. tag: options.tag + rndStr,
  428. body: options.body + (options.addTime ? '\n' + time : ''),
  429. icon: options.icon || (`${window.extPath}img/128.png`),
  430. });
  431. nt.onclick = nt.onclose = () => {
  432. rndStr = generateRandomString();
  433. };
  434. }
  435.  
  436. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/tabs/settings/Settings.ts
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443. clientStorage_defaultExport.remove('settings');
  444. class Settings_Settings {
  445. constructor() {
  446. this.tab = createTab(`настройки`);
  447. this.$root = this.tab.$content;
  448. this.settingsValues = clientStorage_defaultExport.get('ext_settings') || {};
  449. this.deps = {};
  450. this.onCleanup = EventEmitter_defaultExport();
  451. this._onNamedSettingChange = EventEmitter_defaultExport();
  452. this.onNamedSettingChange = (settingName, callback) => {
  453. this._onNamedSettingChange(({ name, value }) => {
  454. if (name === settingName) {
  455. callback(value);
  456. }
  457. });
  458. };
  459. this.drawInput = (st) => {
  460. const settingsValues = this.settingsValues;
  461. let html = '';
  462. if (st.isToggle || st.type === 'checkbox') {
  463. html = `<input type="checkbox" data-name="${st.name}" ${settingsValues[st.name] ? 'checked' : ''}> `;
  464. }
  465. else if (st.type === 'text' || st.type === 'num') {
  466. html =
  467. `<input type="text"
  468. class="input-tiny input-tiny-${st.type}"
  469. data-name="${st.name}"
  470. data-type="${st.type}"
  471. ${settingsValues[st.name]
  472. ? ' value="' + settingsValues[st.name] + '"'
  473. : ''}>`;
  474. if (st.addOn) {
  475. html =
  476. `<div class="input-wrap input-append">${html}<span class="add-on">${st.addOn}</span></div>`;
  477. }
  478. else {
  479. html = `<div class="input-wrap input-wrap-inline">${html}</div>`;
  480. }
  481. }
  482. return html;
  483. };
  484. this.addSets(setsGame);
  485. this.addSets(setsAuto);
  486. console.log('settingsValues>', this.settingsValues);
  487. this.handlersGame();
  488. this.handlersAuto();
  489. }
  490. static getData($input) {
  491. const name = $input.data('name');
  492. const isDisabled = $input.closest('.input-wrap').hasClass('disabled');
  493. let value;
  494. if (isDisabled) {
  495. value = null;
  496. }
  497. if ($input.is('[type="checkbox"]')) {
  498. value = $input.prop('checked');
  499. }
  500. else if ($input.data('type') === 'num') {
  501. value = +$input.val();
  502. }
  503. else {
  504. value = $input.val();
  505. }
  506. return { name, value };
  507. }
  508. handlersGame() {
  509. $('#test-notifications').on('click', e => {
  510. e.preventDefault();
  511. sendNotify('Проверка уведомлений', {
  512. body: 'Проверка уведомлений',
  513. tag: 'test',
  514. });
  515. });
  516. $('#reset-stats').on('click', e => {
  517. if (!confirm('Очистить историю сообщений?')) {
  518. return;
  519. }
  520. this.onCleanup.emit(undefined);
  521. });
  522. }
  523. handlersAuto() {
  524. this.$root.find('[data-auto]')
  525. .on('click', function (e) {
  526. e.preventDefault();
  527. const type = $(this).data('auto');
  528. const types = {
  529. rest: {
  530. autohelpIdle: 1,
  531. autohelpDead: 1,
  532. autohelpHp: 1,
  533. autohelpHpBoss: 1,
  534. autohelpEnergy: 1,
  535. autohelpEnergyFight: 0,
  536. autohelpEnergyRest: 0,
  537. autohelpEnergyWalk: 1,
  538. autohelpEnergyTradeMed: 1,
  539. },
  540. fight: {
  541. autohelpIdle: 0,
  542. autohelpDead: 0,
  543. autohelpHp: 1,
  544. autohelpHpBoss: 0,
  545. autohelpEnergy: 1,
  546. autohelpEnergyFight: 1,
  547. autohelpEnergyRest: 0,
  548. autohelpEnergyWalk: 0,
  549. autohelpEnergyTradeMed: 0,
  550. },
  551. };
  552. const conf = types[type];
  553. for (const key in conf) {
  554. if (conf.hasOwnProperty(key)) {
  555. const value = !!conf[key];
  556. const $input = getSettingInput(key);
  557. $input.prop('checked', value).trigger('change');
  558. }
  559. }
  560. });
  561. }
  562. addSets(sets) {
  563. let html = '';
  564. for (let i = 0; i < sets.length; i++) {
  565. const st = sets[i];
  566. this.settingsDefaults(st.fields);
  567. html +=
  568. `<div class="">
  569. <div class="sets-header">${st.title || ''}</div>
  570. ${this.drawSetsGroup(st.fields)}
  571. </div>`;
  572. }
  573. const $sets = $(`<div class="settings-form form-horizontal">${html}</div>`).appendTo(this.$root);
  574. $sets.find('input')
  575. .each((i, input) => {
  576. const $input = $(input);
  577. const data = Settings_Settings.getData($input);
  578. this.checkDependencies(data);
  579. })
  580. .on('change', e => {
  581. const $input = $(e.target);
  582. const data = Settings_Settings.getData($input);
  583. this.checkDependencies(data);
  584. this.settingsValues[data.name] = data.value;
  585. this._onNamedSettingChange.emit(data);
  586. clientStorage_defaultExport.set('ext_settings', this.settingsValues);
  587. console.log('settings: ', this.settingsValues);
  588. });
  589. }
  590. drawSetsGroup(fields) {
  591. let html = '';
  592. for (let i = 0; i < fields.length; i++) {
  593. const st = fields[i];
  594. const label = `<div class="input-wrap ${st.isToggle ? 'checkbox' : ''}">
  595. <label>${this.drawInput(st)}${st.label}</label>
  596. ${st.inputs
  597. ? st.inputs.map(this.drawInput).join('')
  598. : ''}
  599. </div>`;
  600. html +=
  601. `<div class="sets${st.isInline ? ' sets-inline' : ''}">
  602. <div class="sets-title">
  603. ${label}
  604. ${st.note
  605. ? '<div class="note-block">' + st.note + '</div>'
  606. : ''}
  607. </div>
  608. ${st.subs ? this.drawSetsGroup(st.subs) : ''}
  609. </div>`;
  610. }
  611. clientStorage_defaultExport.set('ext_settings', this.settingsValues);
  612. return html;
  613. }
  614. checkDependencies(settingsData) {
  615. const key = settingsData.name;
  616. const value = settingsData.value;
  617. if (!this.deps[key])
  618. return;
  619. this.deps[key].forEach(keyName => {
  620. getSettingInput(keyName).closest('.input-wrap').toggleClass('disabled', !value); // .prop('disabled', !value);
  621. });
  622. }
  623. /**
  624. * Проставляет дефолтные значения и заполняет зависимости
  625. */
  626. settingsDefaults(fields) {
  627. if (!fields)
  628. return [];
  629. let childs = [];
  630. for (let i = 0; i < fields.length; i++) {
  631. const st = fields[i];
  632. const name = st.name;
  633. if (name) {
  634. childs.push(name);
  635. const storedValue = this.settingsValues[name];
  636. this.settingsValues[name] = typeof storedValue === 'undefined' ? st.value : storedValue;
  637. }
  638. const subsChilds = [
  639. ...this.settingsDefaults(st.inputs),
  640. ...this.settingsDefaults(st.subs),
  641. ];
  642. if (subsChilds.length && name) {
  643. this.deps[name] = subsChilds.filter(x => x);
  644. childs = subsChilds.concat(childs);
  645. }
  646. }
  647. return childs;
  648. }
  649. }
  650. function getSettingInput(key) {
  651. return $(`input[data-name="${key}"]`);
  652. }
  653.  
  654. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/tables.js
  655. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(1);
  656. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);
  657.  
  658.  
  659. //console.log('tables.js')
  660. window.tables = ((_tables => {
  661. 'use strict';
  662.  
  663. function makeSortable($table) {
  664. const $head = $table.find('thead tr').first();
  665. const $rows = $table.find('tbody tr');
  666.  
  667. $head.children('th')
  668. .wrapInner('<span class="sort" />')
  669. .each(function() {
  670. const $th = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a(this);
  671. const thIndex = $th.index();
  672.  
  673. $th.children('.sort').click(function() {
  674. $th.siblings('th').children('.sort').attr('class', 'sort');
  675. const inverse = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a(this).hasClass('sort-up');
  676. __WEBPACK_IMPORTED_MODULE_0_jquery___default.a(this).attr('class', `sort sort-${inverse ? 'down' : 'up'}`);
  677. const arr = [];
  678. $rows.each(function() {
  679. const valueText = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.trim(__WEBPACK_IMPORTED_MODULE_0_jquery___default.a(this).children('td').eq(thIndex).text());
  680. const value = (-valueText) || parseDate(valueText) || valueText;
  681.  
  682. arr.push({
  683. $item: this,
  684. value,
  685. });
  686. });
  687. arr.sort((a, b) => {
  688. if (a.value === b.value) {
  689. return 0;
  690. }
  691. return a.value > b.value
  692. ? inverse ? 1 : -1
  693. : inverse ? -1 : 1;
  694. });
  695. arr.forEach(item => {
  696. $table.append(item.$item);
  697. });
  698. });
  699. });
  700. }
  701.  
  702.  
  703. __WEBPACK_IMPORTED_MODULE_0_jquery___default.a('.table').each(function() {
  704. makeSortable(__WEBPACK_IMPORTED_MODULE_0_jquery___default.a(this));
  705. });
  706.  
  707. __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.extend(_tables, {
  708. makeSortable,
  709. });
  710.  
  711. function parseDate(str) { //02.04.2014 10:50
  712. const p = /(\d{2})\.(\d{2})\.(\d{4})\s(\d{1,2}):(\d{2})/.exec(str);
  713. if (!p) {
  714. return 0;
  715. }
  716. return +new Date(p[3], p[2] - 1, p[1], p[4], p[5]);
  717. }
  718.  
  719. return _tables;
  720. }))({});
  721.  
  722. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/utils/const/vars.ts
  723. ///<reference path="../../typings.d.ts"/>
  724. ///<reference path="../../typings.d.ts"/>
  725. const PHRASE_NUMBER_KEYS = ['damage', 'health', 'coins', 'sell_price'];
  726.  
  727. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/storage/storage.ts
  728. /* harmony default export */ var storage_defaultExport = ({
  729. heroName: '',
  730. companionName: '',
  731. });
  732.  
  733. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/tracking/Tracking.ts
  734. ///<reference path="../typings.d.ts"/>
  735.  
  736.  
  737.  
  738.  
  739. const NEGATIVE_PHRASE_ID = [
  740. 1,
  741. 11,
  742. 12,
  743. 280001,
  744. 280004,
  745. 280010,
  746. 280014,
  747. 280016,
  748. 280019,
  749. ];
  750. const COMPANION_PHRASE_ID = [
  751. 580003,
  752. 580004,
  753. ];
  754. clientStorage_defaultExport.remove('messagesLog');
  755. /**
  756. * Позволяет подписаться на обновление данных
  757. */
  758. class Tracking_Tracking {
  759. constructor() {
  760. this.messagesLog = clientStorage_defaultExport.get('ext_log') || [];
  761. this.onNewTurn = EventEmitter_defaultExport();
  762. this.onNewMessages = EventEmitter_defaultExport();
  763. this.onLoad = EventEmitter_defaultExport();
  764. this.onLoadDone = false;
  765. this.setMaxLogLength = (value) => {
  766. this.maxLogLength = value;
  767. };
  768. this.emitLoad();
  769. }
  770. static convertMessageFromRaw(messageRaw) {
  771. return [
  772. messageRaw[0 /* TimeStamp */],
  773. messageRaw[1 /* TimeSting */],
  774. messageRaw[2 /* PhraseSting */],
  775. messageRaw[3 /* PhraseId */],
  776. Tracking_Tracking.convertPhraseDataFromRaw(messageRaw[4 /* PhraseData */]),
  777. Tracking_Tracking.getMeta(messageRaw),
  778. ];
  779. }
  780. static convertPhraseDataFromRaw(phraseDataRaw) {
  781. const phraseData = Object.assign({}, phraseDataRaw);
  782. for (let i = 0; i < PHRASE_NUMBER_KEYS.length; i++) {
  783. const key = PHRASE_NUMBER_KEYS[i];
  784. const value = phraseDataRaw[key];
  785. if (typeof value === 'string')
  786. phraseData[key] = +value;
  787. }
  788. return phraseData;
  789. }
  790. static getMeta(message) {
  791. const phraseId = message[3 /* PhraseId */];
  792. const phraseDataRaw = message[4 /* PhraseData */];
  793. const actor = phraseDataRaw.attacker || phraseDataRaw.actor;
  794. const isMyName = actor === storage_defaultExport.heroName;
  795. const isMe = isMyName !== NEGATIVE_PHRASE_ID.includes(phraseId);
  796. const isCompanion = !isMyName && actor === storage_defaultExport.companionName || COMPANION_PHRASE_ID.includes(phraseId);
  797. const owner = isMe
  798. ? 0 /* me */
  799. : isCompanion
  800. ? 2 /* companion */
  801. : 1 /* mob */;
  802. return { owner: owner };
  803. }
  804. getMessagesLog() {
  805. return this.messagesLog.map(Tracking_Tracking.convertMessageFromRaw);
  806. }
  807. clear() {
  808. clientStorage_defaultExport.remove('ext_log');
  809. this.messagesLog = [];
  810. }
  811. track(game_data) {
  812. if (!this.onLoadDone)
  813. return;
  814. const hero = game_data.account.hero;
  815. if (!hero)
  816. return;
  817. const messagesLog = this.messagesLog;
  818. const lastLog = messagesLog[messagesLog.length - 1] || [];
  819. const lastTimestamp = lastLog[0 /* TimeStamp */];
  820. const messages = hero.messages;
  821. const messagesNew = [];
  822. for (let i = 0; i < messages.length; i++) {
  823. const messageRaw = messages[i];
  824. const message = Tracking_Tracking.convertMessageFromRaw(messageRaw);
  825. // console.log('time>', lastTimestamp, message[0], message[0] > lastTimestamp, lastLog[1], message[1]);
  826. if (!lastTimestamp || message[0 /* TimeStamp */] > lastTimestamp) {
  827. messagesLog.push(messageRaw);
  828. messagesNew.push(message);
  829. }
  830. }
  831. this.messagesLog = messagesLog.slice(this.maxLogLength ? messagesLog.length - this.maxLogLength : 0);
  832. clientStorage_defaultExport.set('ext_log', this.messagesLog);
  833. this.onNewTurn.emit(hero);
  834. if (messagesNew.length) {
  835. this.onNewMessages.emit(messagesNew);
  836. }
  837. }
  838. emitMessages() {
  839. $(document).on(`${pgf.game.events.DATA_REFRESHED}.ext-tracking`, (e, game_data) => {
  840. this.track(game_data);
  841. });
  842. }
  843. emitLoad() {
  844. this.onLoadDone = false;
  845. $(document).on('ajaxSuccess.ext', (event, XMLHttpRequest, setting, result) => {
  846. if (this.onLoadDone || setting.url.indexOf('/game/api/info') !== 0) {
  847. return;
  848. }
  849. const game_data = result.data;
  850. if (game_data.account.is_old) {
  851. return;
  852. }
  853. this.onLoadDone = true;
  854. const hero = game_data.account.hero;
  855. storage_defaultExport.heroName = hero.base.name;
  856. storage_defaultExport.companionName = hero.companion && hero.companion.name.toLowerCase();
  857. this.onLoad.emit(game_data);
  858. this.track(game_data);
  859. this.emitMessages();
  860. $(document).off('ajaxSuccess.ext');
  861. });
  862. }
  863. }
  864.  
  865. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/utils/const/icons.ts
  866. /* harmony default export */ var icons_defaultExport = ({
  867. fight: __webpack_require__(2),
  868. peace: __webpack_require__(3),
  869. hit: __webpack_require__(4),
  870. might: __webpack_require__(5),
  871. fire: __webpack_require__(6),
  872. flame: __webpack_require__(7),
  873. poisoncloud: __webpack_require__(8),
  874. poison: __webpack_require__(9),
  875. vampire: __webpack_require__(10),
  876. reckless: __webpack_require__(11),
  877. disorientation: __webpack_require__(12),
  878. miss: __webpack_require__(13),
  879. slow: __webpack_require__(14),
  880. strength: __webpack_require__(15),
  881. speed: __webpack_require__(16),
  882. stunHit: __webpack_require__(17),
  883. stun: __webpack_require__(18),
  884. heal: __webpack_require__(19),
  885. companion: `<span class="companion">${__webpack_require__(20)}</span>`,
  886. god: `<span class="god-icon">${__webpack_require__(21)}</span>`,
  887. trade: __webpack_require__(22),
  888. rest: __webpack_require__(23),
  889. loot: __webpack_require__(24),
  890. death: __webpack_require__(25),
  891. travel: __webpack_require__(26),
  892. travelWagon: __webpack_require__(27),
  893. });
  894.  
  895. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/utils/act/act.ts
  896.  
  897.  
  898. function act_act(modificator, shortMsg) {
  899. return `<span class="act ${modificator}">${shortMsg}</span>`;
  900. }
  901. function actPositive(actor, shortMsg) {
  902. const isCompanion = actor === storage_defaultExport.companionName;
  903. const isPositive = isCompanion || actor === storage_defaultExport.heroName;
  904. return `<span class="act ${isPositive ? 'positive' : 'negative'}">${isCompanion ? icons_defaultExport.companion : ''}${shortMsg}</span>`;
  905. }
  906. function actNegative(actor, shortMsg) {
  907. const isCompanion = actor === storage_defaultExport.companionName;
  908. const isPositive = !isCompanion && actor !== storage_defaultExport.heroName;
  909. return `<span class="act ${isPositive ? 'positive' : 'negative'}">${isCompanion ? icons_defaultExport.companion : ''}${shortMsg}</span>`;
  910. }
  911.  
  912. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/utils/act/act-fight.ts
  913. ///<reference path="../../typings.d.ts"/>
  914.  
  915.  
  916. /* harmony default export */ var act_fight_defaultExport = ({
  917. 1: { fn: debuff(icons_defaultExport.stun), type: 'inline' },
  918. 11: { fn: dot(icons_defaultExport.flame), type: 'inline' },
  919. 12: { fn: dot(icons_defaultExport.poisoncloud), type: 'inline' },
  920. 280000: { fn: damage(icons_defaultExport.fire), type: 'inline' },
  921. 280001: { fn: miss(icons_defaultExport.fire), type: 'inline' },
  922. 280002: { fn: cast(icons_defaultExport.slow), type: 'inline' },
  923. 280003: { fn: damage(''), type: 'inline' },
  924. 280004: { fn: miss(icons_defaultExport.hit), type: 'inline' },
  925. 280005: { fn: buff(icons_defaultExport.miss), type: 'inline' },
  926. 280006: { fn: buff(icons_defaultExport.strength), type: 'inline' },
  927. 280007: { fn: cast(icons_defaultExport.poison), type: 'inline' },
  928. 280008: { fn: heal(icons_defaultExport.heal), type: 'inline' },
  929. 280009: { fn: damage(icons_defaultExport.stunHit), type: 'inline' },
  930. 280010: { fn: miss(icons_defaultExport.stunHit), type: 'inline' },
  931. 280011: { fn: cast(icons_defaultExport.disorientation), type: 'inline' },
  932. 280012: { fn: cast(icons_defaultExport.speed), type: 'inline' },
  933. 280013: { fn: damage(icons_defaultExport.might), type: 'inline' },
  934. 280014: { fn: miss(icons_defaultExport.might), type: 'inline' },
  935. 280015: { fn: vampire(icons_defaultExport.vampire), type: 'inline' },
  936. 280016: { fn: miss(icons_defaultExport.vampire), type: 'inline' },
  937. 280017: { fn: companionHeal(icons_defaultExport.heal), type: 'inline' },
  938. 280018: { fn: reckless(icons_defaultExport.reckless), type: 'inline' },
  939. 280019: { fn: miss(icons_defaultExport.reckless), type: 'inline' },
  940. 580003: { fn: companionDefended(icons_defaultExport.miss), type: 'inline' },
  941. 580004: { fn: companionInjured(), type: 'inline' },
  942. });
  943. function damage(icon) {
  944. // attacker атакующий
  945. // damage количество урона
  946. // defender защищающийся
  947. return (phraseData) => actPositive(phraseData.attacker, `<span class="damage">${phraseData.damage}</span>${icon}`);
  948. }
  949. function miss(icon) {
  950. // attacker атакующий
  951. // defender защищающийся
  952. return (phraseData) => actNegative(phraseData.attacker, `${icon}<span class="sub-icon">${icons_defaultExport.miss}</span>`);
  953. }
  954. function cast(icon) {
  955. // attacker атакующий
  956. // defender защищающийся
  957. return (phraseData) => actPositive(phraseData.attacker, `${icon}`);
  958. }
  959. function buff(icon) {
  960. // actor герой или монстр
  961. return (phraseData) => actPositive(phraseData.actor, `${icon}`);
  962. }
  963. function debuff(icon) {
  964. // actor герой или монстр
  965. return (phraseData) => actNegative(phraseData.actor, `${icon}`);
  966. }
  967. function reckless(icon) {
  968. // attacker атакующий
  969. // defender защищающийся
  970. // damage количество урона
  971. // attacker_damage количество урона по атакующему
  972. return (phraseData) => actPositive(phraseData.attacker, `<span class="damage">${phraseData.damage}</span>${icon}<span class="damage-reverse">${phraseData.attacker_damage}</span>`);
  973. }
  974. function vampire(icon) {
  975. // attacker атакующий
  976. // health количество вылеченного здоровья
  977. // damage количество урона
  978. // defender защищающийся
  979. return (phraseData) => actPositive(phraseData.attacker, `<span class="damage">${phraseData.damage}</span>${icon}<span class="vamp">${phraseData.health}</span>`);
  980. }
  981. function dot(icon) {
  982. // damage количество урона
  983. // actor герой или монстр
  984. return (phraseData) => actNegative(phraseData.actor, `<span class="damage">${phraseData.damage}</span>${icon}`);
  985. }
  986. function heal(icon) {
  987. // health количество вылеченного здоровья
  988. // actor герой или монстр
  989. return (phraseData) => actPositive(phraseData.actor, `<span class="heal">${phraseData.health}</span>${icon}`);
  990. }
  991. function companionHeal(icon) {
  992. // actor герой или монстр
  993. // companion спутник
  994. // health количество вылеченного здоровья
  995. return (phraseData) => actPositive(phraseData.actor, `${icons_defaultExport.companion}<span class="heal">${phraseData.health}</span>${icon}`);
  996. }
  997. function companionDefended(icon) {
  998. // companion_owner владелец спутника
  999. // companion спутник
  1000. // attacker атакущий спутника
  1001. return (phraseData) => actPositive(phraseData.companion_owner, `${icons_defaultExport.companion}${icon}`);
  1002. }
  1003. function companionInjured() {
  1004. // companion_owner владелец спутника
  1005. // companion спутник
  1006. // attacker атакущий спутника
  1007. // damage урон
  1008. return (phraseData) => actPositive(phraseData.attacker, `${icons_defaultExport.companion}${phraseData.damage}`);
  1009. }
  1010.  
  1011. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/utils/const/mobs.ts
  1012. /*
  1013. $('table tbody tr').map((i, tr) => ({
  1014. name: $(tr).children().eq(1).text().trim(),
  1015. id: +$(tr).children().eq(1).find('a').attr('href').replace('/guide/mobs/', ''),
  1016. level: +$(tr).children().eq(0).text().trim(),
  1017. })).get()
  1018. .sort((a, b) => a.id - b.id);
  1019. */
  1020. /* harmony default export */ var mobs_defaultExport = ([
  1021. { name: 'букавац', id: 1, level: 1 },
  1022. { name: 'призрачная одежда', id: 2, level: 2 },
  1023. { name: 'зазовка', id: 3, level: 4 },
  1024. { name: 'хищный кустик', id: 4, level: 5 },
  1025. { name: 'нук-секач', id: 5, level: 7 },
  1026. { name: 'бродячий дуб', id: 6, level: 8 },
  1027. { name: 'волк', id: 7, level: 10 },
  1028. { name: 'дух леса', id: 8, level: 11 },
  1029. { name: 'эльриада', id: 9, level: 13 },
  1030. { name: 'блюститель природы', id: 10, level: 14 },
  1031. { name: 'медведь', id: 11, level: 15 },
  1032. { name: 'аристократ', id: 12, level: 17 },
  1033. { name: 'единорог', id: 13, level: 18 },
  1034. { name: 'призрачный волк', id: 14, level: 19 },
  1035. { name: 'астральный охотник', id: 15, level: 21 },
  1036. { name: 'головоног', id: 16, level: 1 },
  1037. { name: 'домашний поползень', id: 17, level: 1 },
  1038. { name: 'гнилушь', id: 18, level: 3 },
  1039. { name: 'ползун', id: 19, level: 4 },
  1040. { name: 'сушилец', id: 20, level: 6 },
  1041. { name: 'гигантская росянка', id: 21, level: 7 },
  1042. { name: 'сбежавший эксперимент', id: 22, level: 9 },
  1043. { name: 'слизь', id: 23, level: 10 },
  1044. { name: 'гидра', id: 24, level: 12 },
  1045. { name: 'щупальце', id: 25, level: 13 },
  1046. { name: 'химический мусорник', id: 26, level: 15 },
  1047. { name: 'упырь', id: 27, level: 16 },
  1048. { name: 'кикимора', id: 28, level: 17 },
  1049. { name: 'бесхозный голем', id: 29, level: 19 },
  1050. { name: 'охотник за реагентами', id: 30, level: 20 },
  1051. { name: 'мутировавший гоблин', id: 31, level: 21 },
  1052. { name: 'василиск', id: 32, level: 21 },
  1053. { name: 'ожившее пугало', id: 33, level: 1 },
  1054. { name: 'хищный хомяк', id: 34, level: 2 },
  1055. { name: 'борец за справедливость', id: 35, level: 4 },
  1056. { name: 'клешнец', id: 36, level: 5 },
  1057. { name: 'маньяк', id: 37, level: 7 },
  1058. { name: 'карточный шулер', id: 38, level: 8 },
  1059. { name: 'богомол', id: 39, level: 10 },
  1060. { name: 'благородный разбойник', id: 40, level: 11 },
  1061. { name: 'одержимый колдун', id: 41, level: 13 },
  1062. { name: 'механический дракончик', id: 42, level: 14 },
  1063. { name: 'дварф-изгнанник', id: 43, level: 15 },
  1064. { name: 'неистовый сектант', id: 44, level: 17 },
  1065. { name: 'механический голем', id: 45, level: 18 },
  1066. { name: 'убийца', id: 46, level: 19 },
  1067. { name: 'полоумный маг', id: 47, level: 21 },
  1068. { name: 'шакал', id: 48, level: 1 },
  1069. { name: 'скорпион', id: 49, level: 1 },
  1070. { name: 'налётчик', id: 50, level: 3 },
  1071. { name: 'огненная лиса', id: 51, level: 4 },
  1072. { name: 'орк-изгнанник', id: 52, level: 6 },
  1073. { name: 'белый скарабей', id: 53, level: 7 },
  1074. { name: 'гремучая змея', id: 54, level: 9 },
  1075. { name: 'саламандра', id: 55, level: 10 },
  1076. { name: 'пустынный дракончик', id: 56, level: 12 },
  1077. { name: 'джинн', id: 57, level: 13 },
  1078. { name: 'берсерк', id: 58, level: 15 },
  1079. { name: 'смерч', id: 59, level: 16 },
  1080. { name: 'заблудший шаман', id: 60, level: 17 },
  1081. { name: 'шайтан', id: 61, level: 19 },
  1082. { name: 'крыса', id: 62, level: 1 },
  1083. { name: 'бандит', id: 63, level: 1 },
  1084. { name: 'призрак', id: 64, level: 7 },
  1085. { name: 'неупокоенный', id: 65, level: 15 },
  1086. { name: 'гремлин', id: 66, level: 1 },
  1087. { name: 'подыльник', id: 67, level: 3 },
  1088. { name: 'странствующий рыцарь', id: 68, level: 24 },
  1089. { name: 'нага', id: 69, level: 18 },
  1090. { name: 'охотник за головами', id: 70, level: 24 },
  1091. { name: 'суккуб', id: 71, level: 25 },
  1092. { name: 'вирика', id: 72, level: 1 },
  1093. { name: 'див', id: 73, level: 1 },
  1094. { name: 'додо', id: 74, level: 1 },
  1095. { name: 'ангиак', id: 75, level: 1 },
  1096. { name: 'бхут', id: 76, level: 1 },
  1097. { name: 'гвиллион', id: 77, level: 1 },
  1098. { name: 'вилах', id: 78, level: 1 },
  1099. { name: 'вендиго', id: 79, level: 1 },
  1100. { name: 'галд', id: 80, level: 1 },
  1101. { name: 'ачери', id: 81, level: 1 },
  1102. { name: 'земляная даппи', id: 82, level: 3 },
  1103. { name: 'огненная даппи', id: 83, level: 3 },
  1104. { name: 'анчутка', id: 84, level: 1 },
  1105. { name: 'жихарь', id: 85, level: 2 },
  1106. { name: 'йиена', id: 86, level: 10 },
  1107. { name: 'мара', id: 87, level: 19 },
  1108. { name: 'боец Серого Ордена', id: 88, level: 43 },
  1109. { name: 'спятивший лорд', id: 89, level: 21 },
  1110. { name: 'волколак', id: 90, level: 24 },
  1111. { name: 'медвелак', id: 91, level: 41 },
  1112. { name: 'аколит огня', id: 92, level: 28 },
  1113. { name: 'ламия', id: 93, level: 43 },
  1114. { name: 'баргест', id: 94, level: 22 },
  1115. { name: 'вий', id: 95, level: 42 },
  1116. { name: 'гьюнальский паук', id: 96, level: 42 },
  1117. { name: 'дэра', id: 97, level: 23 },
  1118. { name: 'гриндель', id: 98, level: 22 },
  1119. { name: 'грим', id: 99, level: 40 },
  1120. { name: 'кагир', id: 100, level: 37 },
  1121. { name: 'друджи', id: 101, level: 30 },
  1122. { name: 'даса', id: 102, level: 36 },
  1123. { name: 'ичетик', id: 103, level: 28 },
  1124. { name: 'кера', id: 104, level: 24 },
  1125. { name: 'куд', id: 105, level: 37 },
  1126. { name: 'ларва', id: 106, level: 29 },
  1127. { name: 'егви', id: 107, level: 27 },
  1128. { name: 'каменный великан', id: 108, level: 38 },
  1129. { name: 'каннибал', id: 109, level: 35 },
  1130. { name: 'ламашту', id: 110, level: 40 },
  1131. { name: 'лахама', id: 111, level: 26 },
  1132. { name: 'наркоман', id: 112, level: 22 },
  1133. { name: 'бывший палач', id: 113, level: 32 },
  1134. { name: 'мародёр', id: 114, level: 26 },
  1135. { name: 'страхолев', id: 115, level: 27 },
  1136. { name: 'злоцвет', id: 116, level: 32 },
  1137. { name: 'варвар', id: 117, level: 30 },
  1138. { name: 'ночная хныка', id: 118, level: 31 },
  1139. { name: 'омерзень', id: 119, level: 39 },
  1140. { name: 'смрадень', id: 120, level: 36 },
  1141. { name: 'глыдень', id: 121, level: 38 },
  1142. { name: 'песчаный холерник', id: 122, level: 39 },
  1143. { name: 'мать анаконд', id: 123, level: 31 },
  1144. { name: 'белая гиена', id: 124, level: 44 },
  1145. { name: 'мраморный бык', id: 125, level: 33 },
  1146. { name: 'язвомор', id: 126, level: 41 },
  1147. { name: 'лишайница', id: 127, level: 33 },
  1148. { name: 'жирница', id: 128, level: 35 },
  1149. { name: 'бульг', id: 129, level: 41 },
  1150. { name: 'костогрыз', id: 130, level: 34 },
  1151. { name: 'каменник', id: 131, level: 26 },
  1152. { name: 'вирница', id: 132, level: 9 },
  1153. { name: 'тигр', id: 133, level: 9 },
  1154. { name: 'барбегаз', id: 134, level: 12 },
  1155. { name: 'бродячий огонек', id: 135, level: 2 },
  1156. { name: 'скальник', id: 136, level: 23 },
  1157. { name: 'пупырник', id: 137, level: 24 },
  1158. { name: 'стогница', id: 138, level: 9 },
  1159. { name: 'гунила', id: 139, level: 18 },
  1160. { name: 'пёстробородый', id: 140, level: 28 },
  1161. { name: 'капитан Серых Плащей', id: 141, level: 45 },
  1162. { name: 'аколит льда', id: 142, level: 41 },
  1163. { name: 'семиглаз', id: 143, level: 12 },
  1164. { name: 'гюрза', id: 144, level: 8 },
  1165. { name: 'медвежук', id: 145, level: 15 },
  1166. { name: 'снежная росомаха', id: 146, level: 30 },
  1167. { name: 'койот', id: 147, level: 2 },
  1168. { name: 'горный манул', id: 148, level: 13 },
  1169. { name: 'мастер огня', id: 149, level: 33 },
  1170. { name: 'мастер льда', id: 150, level: 43 },
  1171. { name: 'кобольд', id: 151, level: 1 },
  1172. { name: 'пожиратель плоти', id: 152, level: 44 },
  1173. { name: 'главарь пёстробородых', id: 153, level: 38 },
  1174. { name: 'ученик Силы', id: 154, level: 11 },
  1175. { name: 'гомункул', id: 155, level: 10 },
  1176. { name: 'некромант', id: 156, level: 46 },
  1177. { name: 'тагар', id: 157, level: 52 },
  1178. { name: 'стрига', id: 158, level: 50 },
  1179. { name: 'приземник', id: 159, level: 48 },
  1180. { name: 'лесной тролль', id: 160, level: 50 },
  1181. { name: 'вурдалак', id: 161, level: 56 },
  1182. { name: 'болотный тролль', id: 162, level: 55 },
  1183. { name: 'бескуд', id: 163, level: 45 },
  1184. { name: 'атач', id: 164, level: 51 },
  1185. { name: 'камелопард', id: 165, level: 50 },
  1186. { name: 'невиданная тварь', id: 166, level: 1 },
  1187. { name: 'ырка', id: 167, level: 61 },
  1188. { name: 'шоток', id: 168, level: 58 },
  1189. { name: 'хрустальный барс', id: 169, level: 56 },
  1190. { name: 'галлу', id: 170, level: 48 },
  1191. { name: 'джудцгу', id: 171, level: 65 },
  1192. { name: 'изг', id: 172, level: 61 },
  1193. { name: 'ведомый', id: 182, level: 40 },
  1194. { name: 'комол', id: 189, level: 47 },
  1195. { name: 'ледяной тур', id: 190, level: 53 },
  1196. { name: 'нахцерер', id: 191, level: 54 },
  1197. { name: 'склеповник', id: 192, level: 60 },
  1198. { name: 'хала', id: 193, level: 45 },
  1199. { name: 'кумо', id: 194, level: 35 },
  1200. { name: 'мботата', id: 195, level: 33 },
  1201. { name: 'ракопаук', id: 196, level: 25 },
  1202. { name: 'иеля', id: 197, level: 20 }
  1203. ]);
  1204.  
  1205. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/utils/const/artifacts.ts
  1206. /*
  1207. NOTE со страницы: http://the-tale.org/guide/artifacts/
  1208. $('table').eq(1)
  1209. .find('tbody tr')
  1210. .filter((i, tr) => $(tr).children().eq(3).text().trim() !== 'хлам')
  1211. .map((i, tr) => ({
  1212. name: $(tr).children().eq(1).text().trim(),
  1213. id: +$(tr).children().eq(1).find('a').attr('href').replace('/guide/artifacts/', ''),
  1214. level: +$(tr).children().eq(0).text().trim(),
  1215. }))
  1216. .get()
  1217. .sort((a, b) => a.id - b.id);
  1218. */
  1219. /* harmony default export */ var artifacts_defaultExport = ([
  1220. { name: 'портки', id: 1, level: 1 },
  1221. { name: 'лапти', id: 2, level: 1 },
  1222. { name: 'роба', id: 3, level: 1 },
  1223. { name: 'рукавицы', id: 4, level: 1 },
  1224. { name: 'дубинка', id: 5, level: 1 },
  1225. { name: 'оленьи рога', id: 6, level: 1 },
  1226. { name: 'волшебные штаны', id: 7, level: 2 },
  1227. { name: 'осиное жало', id: 8, level: 4 },
  1228. { name: 'живой корень', id: 9, level: 5 },
  1229. { name: 'пятачок', id: 10, level: 7 },
  1230. { name: 'дубина', id: 11, level: 8 },
  1231. { name: 'волчьи клыки', id: 12, level: 10 },
  1232. { name: 'сердце леса', id: 13, level: 11 },
  1233. { name: 'боевая помада', id: 14, level: 13 },
  1234. { name: 'короткое копьё', id: 15, level: 14 },
  1235. { name: 'медвежья лапа', id: 16, level: 15 },
  1236. { name: 'тонкие перчатки', id: 17, level: 17 },
  1237. { name: 'налобный рог', id: 18, level: 18 },
  1238. { name: 'призрачные наплечники', id: 19, level: 19 },
  1239. { name: 'магическая броня', id: 20, level: 21 },
  1240. { name: 'мёртвый головастик', id: 21, level: 1 },
  1241. { name: 'тулуп поползня', id: 22, level: 1 },
  1242. { name: 'звёздный венок', id: 23, level: 3 },
  1243. { name: 'склизкие сапоги', id: 24, level: 4 },
  1244. { name: 'болотные сапоги', id: 25, level: 6 },
  1245. { name: 'пасть росянки', id: 26, level: 7 },
  1246. { name: 'химический доспех', id: 27, level: 9 },
  1247. { name: 'мозговой слизень', id: 28, level: 10 },
  1248. { name: 'кожаные штаны', id: 29, level: 12 },
  1249. { name: 'галстук из щупальца', id: 30, level: 13 },
  1250. { name: 'пропитанный химией плащ', id: 31, level: 15 },
  1251. { name: 'рваные перчатки', id: 32, level: 16 },
  1252. { name: 'рваньё', id: 33, level: 17 },
  1253. { name: 'глиняные штаны', id: 34, level: 19 },
  1254. { name: 'белый халат', id: 35, level: 20 },
  1255. { name: 'узкие штаны', id: 36, level: 21 },
  1256. { name: 'сверкающий плащ', id: 37, level: 21 },
  1257. { name: 'метла', id: 38, level: 1 },
  1258. { name: 'волшебное зёрнышко', id: 39, level: 2 },
  1259. { name: 'меч справедливости', id: 40, level: 4 },
  1260. { name: 'выеденный плащ', id: 41, level: 5 },
  1261. { name: 'резиновые перчатки', id: 42, level: 7 },
  1262. { name: 'джокер', id: 43, level: 8 },
  1263. { name: 'лапа богомола', id: 44, level: 10 },
  1264. { name: 'отравленный кинжал', id: 45, level: 11 },
  1265. { name: 'одержалка', id: 46, level: 13 },
  1266. { name: 'шипованный хвост', id: 47, level: 14 },
  1267. { name: 'рунный топор', id: 48, level: 15 },
  1268. { name: 'молот атеистов', id: 49, level: 17 },
  1269. { name: 'стальные трусы', id: 50, level: 18 },
  1270. { name: 'убивалка', id: 51, level: 19 },
  1271. { name: 'разумный обруч', id: 52, level: 21 },
  1272. { name: 'шкура шакала', id: 53, level: 1 },
  1273. { name: 'жало скорпиона', id: 54, level: 1 },
  1274. { name: 'добротные штаны', id: 55, level: 3 },
  1275. { name: 'пламенный воротник', id: 56, level: 4 },
  1276. { name: 'большой-большой меч', id: 57, level: 6 },
  1277. { name: 'высушенный скарабей', id: 58, level: 7 },
  1278. { name: 'погремушка', id: 59, level: 9 },
  1279. { name: 'огненный плащ', id: 60, level: 10 },
  1280. { name: 'доспех из чешуек дракона', id: 61, level: 12 },
  1281. { name: 'волшебная лампа', id: 62, level: 13 },
  1282. { name: 'концентрированная ярость', id: 63, level: 15 },
  1283. { name: 'ветреные сапоги', id: 64, level: 16 },
  1284. { name: 'волшебный посох', id: 65, level: 17 },
  1285. { name: 'пергамент', id: 66, level: 19 },
  1286. { name: 'корона', id: 67, level: 1 },
  1287. { name: 'дряхлый доспех', id: 68, level: 1 },
  1288. { name: 'цепи', id: 69, level: 7 },
  1289. { name: 'каска', id: 70, level: 15 },
  1290. { name: 'разбитый щит', id: 138, level: 1 },
  1291. { name: 'старое кольцо', id: 139, level: 1 },
  1292. { name: 'мех подыльника', id: 140, level: 3 },
  1293. { name: 'гербовый щит', id: 142, level: 24 },
  1294. { name: 'перчатки из кожи наги', id: 144, level: 18 },
  1295. { name: 'боевая плеть', id: 146, level: 24 },
  1296. { name: 'катар', id: 149, level: 25 },
  1297. { name: 'каменный нож', id: 150, level: 1 },
  1298. { name: 'кусочек янтаря', id: 152, level: 1 },
  1299. { name: 'лопатки додо', id: 155, level: 1 },
  1300. { name: 'перепончатые крылья', id: 157, level: 1 },
  1301. { name: 'бхулава', id: 158, level: 1 },
  1302. { name: 'маска гвиллиона', id: 161, level: 1 },
  1303. { name: 'ухо вилаха', id: 162, level: 1 },
  1304. { name: 'туманные наплечники', id: 164, level: 1 },
  1305. { name: 'боевой цеп', id: 167, level: 1 },
  1306. { name: 'колечко с камушком', id: 168, level: 1 },
  1307. { name: 'песчаное кольцо', id: 170, level: 3 },
  1308. { name: 'угольное кольцо', id: 172, level: 3 },
  1309. { name: 'медное кольцо', id: 174, level: 1 },
  1310. { name: 'печатка жихаря', id: 176, level: 2 },
  1311. { name: 'могильный перстень', id: 178, level: 10 },
  1312. { name: 'солидное кольцо', id: 180, level: 19 },
  1313. { name: 'чистый щит', id: 182, level: 43 },
  1314. { name: 'фамильный перстень', id: 184, level: 21 },
  1315. { name: 'кольцо зверя', id: 186, level: 24 },
  1316. { name: 'плащ зверя', id: 188, level: 41 },
  1317. { name: 'горячее кольцо', id: 190, level: 28 },
  1318. { name: 'хрустальный коготь', id: 192, level: 43 },
  1319. { name: 'чёрный волос', id: 194, level: 22 },
  1320. { name: 'кольцо первородного', id: 196, level: 42 },
  1321. { name: 'паучий щит', id: 199, level: 42 },
  1322. { name: 'доспех из дэры', id: 201, level: 23 },
  1323. { name: 'гринделевые ботинки', id: 203, level: 22 },
  1324. { name: 'гримовый хопеш', id: 204, level: 40 },
  1325. { name: 'кагирские перчатки', id: 206, level: 37 },
  1326. { name: 'друджийская сабля', id: 208, level: 30 },
  1327. { name: 'дасийские наплечники', id: 210, level: 36 },
  1328. { name: 'слёзы ичетики', id: 212, level: 28 },
  1329. { name: 'теневой плащ', id: 215, level: 24 },
  1330. { name: 'кудово кольцо', id: 217, level: 37 },
  1331. { name: 'топор ларвы', id: 218, level: 29 },
  1332. { name: 'белая туника', id: 220, level: 27 },
  1333. { name: 'скалистая накидка', id: 222, level: 38 },
  1334. { name: 'мясорез', id: 224, level: 35 },
  1335. { name: 'голова ламашту', id: 226, level: 40 },
  1336. { name: 'лахамовый плащ', id: 228, level: 26 },
  1337. { name: 'лезвие', id: 231, level: 22 },
  1338. { name: 'поцелуй смерти', id: 232, level: 32 },
  1339. { name: 'обувь мертвеца', id: 234, level: 26 },
  1340. { name: 'седые чикчиры', id: 236, level: 27 },
  1341. { name: 'плетёнки', id: 239, level: 32 },
  1342. { name: 'зубастая кожа', id: 240, level: 30 },
  1343. { name: 'холодные наручи', id: 242, level: 31 },
  1344. { name: 'червивы', id: 244, level: 39 },
  1345. { name: 'тёплые сандалии', id: 247, level: 36 },
  1346. { name: 'шнурок-лекарь', id: 249, level: 38 },
  1347. { name: 'холерные наплечники', id: 250, level: 39 },
  1348. { name: 'буро-зелёные штаны', id: 252, level: 31 },
  1349. { name: 'крылья гиены', id: 254, level: 44 },
  1350. { name: 'мраморный мантлет', id: 256, level: 33 },
  1351. { name: 'язвенный гиматий', id: 258, level: 41 },
  1352. { name: 'цветик', id: 260, level: 33 },
  1353. { name: 'жирник', id: 263, level: 35 },
  1354. { name: 'бульгово зеркало', id: 265, level: 41 },
  1355. { name: 'белокостник', id: 267, level: 34 },
  1356. { name: 'базальтовый шар', id: 268, level: 26 },
  1357. { name: 'виринки', id: 271, level: 9 },
  1358. { name: 'тигриная шкура', id: 272, level: 9 },
  1359. { name: 'пятки барбегаза', id: 275, level: 12 },
  1360. { name: 'болотная искра', id: 277, level: 2 },
  1361. { name: 'диадема зрячего', id: 278, level: 23 },
  1362. { name: 'лягушачья кожа', id: 281, level: 24 },
  1363. { name: 'луговые наплечники', id: 282, level: 9 },
  1364. { name: 'роуч', id: 284, level: 18 },
  1365. { name: 'братец-топор', id: 287, level: 28 },
  1366. { name: 'золочёная шпага', id: 288, level: 45 },
  1367. { name: 'морозная пика', id: 290, level: 41 },
  1368. { name: 'тараканий щит', id: 292, level: 12 },
  1369. { name: 'гюрзовые ботинки', id: 294, level: 8 },
  1370. { name: 'костяной щит', id: 296, level: 15 },
  1371. { name: 'снежные наплечники', id: 299, level: 30 },
  1372. { name: 'лёгкий коготь', id: 300, level: 2 },
  1373. { name: 'горная мантия', id: 303, level: 13 },
  1374. { name: 'красный капюшон', id: 304, level: 33 },
  1375. { name: 'белая кираса', id: 306, level: 43 },
  1376. { name: 'костяной нож', id: 308, level: 1 },
  1377. { name: 'мясник', id: 310, level: 44 },
  1378. { name: 'ониксовый марион', id: 313, level: 38 },
  1379. { name: 'радужная кольчуга', id: 314, level: 38 },
  1380. { name: 'крылатое манто', id: 315, level: 11 },
  1381. { name: 'гомункуловые перчатки', id: 317, level: 10 },
  1382. { name: 'печатка праха', id: 319, level: 46 },
  1383. { name: 'амулет смерти', id: 320, level: 46 },
  1384. { name: 'тагарин', id: 322, level: 52 },
  1385. { name: 'кольцо очарования', id: 324, level: 50 },
  1386. { name: 'пушистая шкура', id: 327, level: 48 },
  1387. { name: 'лесной оберег', id: 328, level: 50 },
  1388. { name: 'глаза мёртвого', id: 330, level: 56 },
  1389. { name: 'болотный оберег', id: 333, level: 55 },
  1390. { name: 'чёрный плащ', id: 335, level: 45 },
  1391. { name: 'шрам атача', id: 336, level: 51 },
  1392. { name: 'кисы', id: 338, level: 50 },
  1393. { name: 'светящийся глаз', id: 345, level: 61 },
  1394. { name: 'шотоковая капелина', id: 347, level: 58 },
  1395. { name: 'хрустальная шкура', id: 349, level: 56 },
  1396. { name: 'шипованная плеть', id: 351, level: 48 },
  1397. { name: 'сапоги мертвеца', id: 354, level: 65 },
  1398. { name: 'изгилии', id: 356, level: 61 },
  1399. { name: 'кеньги', id: 357, level: 47 },
  1400. { name: 'железные копыта', id: 359, level: 53 },
  1401. { name: 'каменные чётки', id: 361, level: 54 },
  1402. { name: 'костяной цеп', id: 363, level: 60 },
  1403. { name: 'чешуйчатые руки', id: 366, level: 45 },
  1404. { name: 'сверкающий хлыст', id: 367, level: 40 },
  1405. { name: 'заговорённый балахон', id: 370, level: 35 },
  1406. { name: 'зоркий камень', id: 372, level: 33 },
  1407. { name: 'баклеранер', id: 373, level: 25 }
  1408. ]);
  1409.  
  1410. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/utils/act/group-fight.ts
  1411. ///<reference path="../../typings.d.ts"/>
  1412.  
  1413.  
  1414.  
  1415.  
  1416. /* harmony default export */ var group_fight_defaultExport = ({
  1417. // 3: {fn: fn, type: 'block'}, // Дневник: Герой убит'
  1418. // 4: {fn: fn, type: 'block'}, // Дневник: Получить опыт за убийство монстра'
  1419. // 5: {fn: fn, type: 'block'}, // Журнал: Герой убит'
  1420. 6: { fn: flightStart(icons_defaultExport.fight, icons_defaultExport.death), type: 'block' },
  1421. 7: { fn: flightStart(icons_defaultExport.fight, icons_defaultExport.travel), type: 'block' },
  1422. 8: { fn: mobAct(icons_defaultExport.death), type: 'inline' },
  1423. 9: { fn: lootEmpty, type: 'block' },
  1424. 10: { fn: flightStart(icons_defaultExport.peace), type: 'block' },
  1425. 13: { fn: loot(''), type: 'block' },
  1426. 14: { fn: loot('drop', ' (нет места)'), type: 'block' },
  1427. 15: { fn: flightStart(icons_defaultExport.fight), type: 'block' },
  1428. 16: { fn: flightStart(icons_defaultExport.fight, icons_defaultExport.companion), type: 'block' },
  1429. });
  1430. function flightStart(icon, icon2 = '') {
  1431. // mob монстр
  1432. // hero герой
  1433. // companion? спутник
  1434. return (phraseData) => {
  1435. const mob = mobs_defaultExport.filter(m => m.name === phraseData.mob)[0] ||
  1436. ({ level: 'неизвестен', id: 'неизвестен' });
  1437. return act_act('', `${icon} ${icon2} ${phraseData.mob} (уровень ${mob.level}) <a href="/guide/mobs/${mob.id}">#</a>`);
  1438. };
  1439. }
  1440. function mobAct(icon) {
  1441. // mob монстр
  1442. // hero герой
  1443. return (phraseData) => {
  1444. return act_act('', `${icon} ${phraseData.mob}`);
  1445. };
  1446. }
  1447. function lootEmpty(phraseData) {
  1448. // mob монстр
  1449. // hero герой
  1450. return act_act('loot empty', `нет добычи`);
  1451. }
  1452. function loot(modificator, msg = '') {
  1453. // mob монстр
  1454. // hero герой
  1455. // artifact предмет
  1456. return (phraseData) => {
  1457. const artifact = artifacts_defaultExport.filter(m => m.name === phraseData.artifact)[0];
  1458. const artifactHtml = artifact
  1459. ? `<a href="/guide/artifacts/${artifact.id}">${phraseData.artifact}</a>`
  1460. : phraseData.artifact;
  1461. return act_act(`loot ${modificator}`, `${icons_defaultExport.loot} <span class="artifact">${artifactHtml}</span>${msg}`);
  1462. };
  1463. }
  1464.  
  1465. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/utils/act/act-travel.ts
  1466. ///<reference path="../../typings.d.ts"/>
  1467.  
  1468.  
  1469. /* harmony default export */ var act_travel_defaultExport = ({
  1470. 120001: { fn: travel(icons_defaultExport.travel), type: 'block' },
  1471. 120002: { fn: travel(icons_defaultExport.travel), type: 'block' },
  1472. 120003: { fn: travel(icons_defaultExport.travelWagon), type: 'block' },
  1473. 180001: { fn: rest(icons_defaultExport.rest), type: 'inline' },
  1474. 220001: { fn: tradeSell, type: 'inline' },
  1475. 80001: { fn: tradeBuy, type: 'inline' },
  1476. 80002: { fn: tradeChange, type: 'inline' },
  1477. 80003: { fn: tradeChange, type: 'inline' },
  1478. });
  1479. function tradeSell(phraseData) {
  1480. // coins количество монет
  1481. // hero герой
  1482. // artifact предмет
  1483. return act_act('trade', `<span class="artifact">${phraseData.artifact}</span>→<span class="coins">${phraseData.coins}${icons_defaultExport.trade}</span>`);
  1484. }
  1485. function tradeBuy(phraseData) {
  1486. // coins количество монет
  1487. // hero герой
  1488. // artifact предмет
  1489. return act_act('trade', `<span class="coins">${phraseData.coins}${icons_defaultExport.trade}→<span class="artifact">${phraseData.artifact}</span></span>`);
  1490. }
  1491. function tradeChange(phraseData) {
  1492. // sell_price цена продажи
  1493. // hero герой
  1494. // old_artifact? старый артефакт
  1495. // coins количество монет
  1496. // artifact предмет
  1497. return (tradeSell({
  1498. artifact: phraseData.old_artifact || phraseData.artifact,
  1499. hero: phraseData.hero,
  1500. coins: phraseData.sell_price,
  1501. }) +
  1502. '|' +
  1503. tradeBuy({
  1504. artifact: phraseData.artifact,
  1505. hero: phraseData.hero,
  1506. coins: phraseData.coins,
  1507. }));
  1508. }
  1509. function rest(icon) {
  1510. // hero герой
  1511. // health количество здоровья
  1512. return (phraseData) => act_act('positive', `${icon}<span class="heal">${phraseData.health}</span>`);
  1513. }
  1514. function travel(icon) {
  1515. // destination конечное место назначения
  1516. // hero герой
  1517. // current_destination текущее место назначения
  1518. return (phraseData) => act_act('', `${icon} ${phraseData.destination}`);
  1519. }
  1520.  
  1521. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/utils/act/act-god-abilities.ts
  1522. ///<reference path="../../typings.d.ts"/>
  1523.  
  1524.  
  1525. const CRIT = '!';
  1526. /* harmony default export */ var act_god_abilities_defaultExport = ({
  1527. // 240002: {fn: test, type: 'block'}, // Журнал: Вызов ремонтника
  1528. // 240003: {fn: test, type: 'block'}, // Журнал: Вызов ремонтника (критический эффект)
  1529. // 240004: {fn: test, type: 'block'}, // Журнал: Выкинуть самый дешёвый предмет из рюкзака
  1530. // 240005: {fn: test, type: 'block'}, // Журнал: Выкинуть самый дешёвый предмет из рюкзака (критическое срабатывание)
  1531. 240006: { fn: abilityExp(), type: 'block' },
  1532. 240008: { fn: abilityHeal(''), type: 'inline' },
  1533. 240009: { fn: abilityHeal('', CRIT), type: 'inline' },
  1534. 240010: { fn: abilityDamage(), type: 'inline' },
  1535. 240011: { fn: abilityDamage(CRIT), type: 'inline' },
  1536. 240012: { fn: abilityCoins(), type: 'inline' },
  1537. 240013: { fn: abilityCoins(CRIT), type: 'inline' },
  1538. 240014: { fn: abilityText('воскрешение'), type: 'block' },
  1539. 240015: { fn: abilityMove('телепорт'), type: 'block' },
  1540. 240016: { fn: abilityMove('телепорт', CRIT), type: 'block' },
  1541. 240017: { fn: abilityMove('начало задания'), type: 'block' },
  1542. 240018: { fn: abilityText('запасение энергии'), type: 'block' },
  1543. 240019: { fn: abilityText('запасение энергии', CRIT), type: 'block' },
  1544. 240020: { fn: abilityHeal(icons_defaultExport.companion), type: 'inline' },
  1545. 240021: { fn: abilityHeal(icons_defaultExport.companion, CRIT), type: 'inline' },
  1546. 300006: { fn: abilityGiftReturn(), type: 'block' },
  1547. });
  1548. function abilityText(text, crit = '') {
  1549. return (phraseData) => act_act('god', `${icons_defaultExport.god}${text}${crit}`);
  1550. }
  1551. function abilityGiftReturn() {
  1552. // hero герой
  1553. // artifact артефакт
  1554. return (phraseData) => act_act('god', `${icons_defaultExport.god}${phraseData.artifact}→вернулся ребёнку`);
  1555. }
  1556. function abilityMove(text, crit = '') {
  1557. // hero герой
  1558. return (phraseData) => act_act('god', `${icons_defaultExport.god}${icons_defaultExport.travel}${text}${crit}`);
  1559. }
  1560. function abilityExp(crit = '') {
  1561. // hero герой
  1562. // experience количество опыта
  1563. return (phraseData) => act_act('god', `${icons_defaultExport.god}+${phraseData.experience}${crit} опыта`);
  1564. }
  1565. function abilityCoins(crit = '') {
  1566. // coins количество монет
  1567. // hero герой
  1568. return (phraseData) => act_act('god', `${icons_defaultExport.god}${phraseData.coins}${crit}${icons_defaultExport.trade}`);
  1569. }
  1570. function abilityHeal(icon, crit = '') {
  1571. // hero герой
  1572. // health количество здоровья
  1573. // companion? спутник
  1574. return (phraseData) => act_act('god', `${icons_defaultExport.god}${phraseData.health}${crit}${icons_defaultExport.heal}${icon}`);
  1575. }
  1576. function abilityDamage(crit = '') {
  1577. // attacker атакующий
  1578. // damage количество урона
  1579. // defender защищающийся
  1580. return (phraseData) => act_act('god', `${icons_defaultExport.god}<span class="damage">${phraseData.damage}${crit}</span>${icons_defaultExport.hit}`);
  1581. }
  1582.  
  1583. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/utils/phraseToHtml.ts
  1584. ///<reference path="../typings.d.ts"/>
  1585.  
  1586.  
  1587.  
  1588.  
  1589. const actsByIds = Object.assign({}, group_fight_defaultExport, act_fight_defaultExport, act_travel_defaultExport, act_god_abilities_defaultExport);
  1590. function actToHtmlShort(act, message) {
  1591. return `<span title="${details(message)}">${act.fn(message[4 /* PhraseData */])}</span>`;
  1592. }
  1593. function actToHtmlDefault(message) {
  1594. return `<span title="${details(message)}">${message[2 /* PhraseSting */]}</span>`;
  1595. }
  1596. function details(message) {
  1597. const timeSting = message[1 /* TimeSting */];
  1598. const phraseSting = message[2 /* PhraseSting */];
  1599. const phraseId = message[3 /* PhraseId */];
  1600. const phraseData = message[4 /* PhraseData */];
  1601. return `[${timeSting}] ${phraseSting}\n${phraseId}: ${JSON.stringify(phraseData).replace(/"/g, '&quot;')}`;
  1602. }
  1603.  
  1604. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/tabs/short/ShortMessages.ts
  1605.  
  1606.  
  1607. /**
  1608. * @typedef {[number, string, string, number, object]} Message - сообщения журнала из API
  1609. */
  1610. class ShortMessages_ShortMessages {
  1611. constructor() {
  1612. this.tab = createTab('кратко');
  1613. this.$root = this.tab.$content;
  1614. this.$list = $(`<ul class="unstyled pgf-log-list"></ul>`).appendTo(this.$root);
  1615. this.$prevGroup = null;
  1616. }
  1617. addMessages(messages) {
  1618. for (let i = 0; i < messages.length; i++) {
  1619. const message = messages[i];
  1620. this.addMessage(message);
  1621. }
  1622. }
  1623. addMessage(message) {
  1624. const act = actsByIds[message[3 /* PhraseId */]];
  1625. const html = act
  1626. ? actToHtmlShort(act, message)
  1627. : actToHtmlDefault(message);
  1628. const type = act && act.type || 'block';
  1629. if (type === 'inline') {
  1630. if (!this.$prevGroup) {
  1631. this.$prevGroup = this.createRecord(html, true);
  1632. }
  1633. else {
  1634. this.addToRecord(html, this.$prevGroup);
  1635. }
  1636. }
  1637. else {
  1638. this.createRecord(html, false);
  1639. this.$prevGroup = null;
  1640. }
  1641. }
  1642. clear() {
  1643. this.$list.html('');
  1644. }
  1645. createRecord(html, isShort) {
  1646. return $(`<li class="log-record ${isShort ? 'ext' : ''}">` +
  1647. `<div class="time">↓</div>` +
  1648. `<div class="pgf-message message">` +
  1649. `<span class="submessage">` +
  1650. `${html}` +
  1651. `</span>` +
  1652. `</div>` +
  1653. `</li>`).prependTo(this.$list);
  1654. }
  1655. addToRecord(html, $record) {
  1656. $record.find('.submessage').prepend(html);
  1657. }
  1658. }
  1659.  
  1660. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/utils/const/texts.ts
  1661. ///<reference path="../../typings.d.ts"/>
  1662. ///<reference path="../../typings.d.ts"/>
  1663. const PHRASE_ID_TO_TEXT = {
  1664. 1: 'Стан',
  1665. 11: 'Горение',
  1666. 12: 'Яд',
  1667. 280000: 'Пиромания',
  1668. 280001: 'Пиромания',
  1669. 280002: 'Контроль',
  1670. 280003: 'Удар',
  1671. 280004: 'Удар',
  1672. 280005: 'Последний шанс',
  1673. 280006: 'Ярость',
  1674. 280007: 'Ядовитость',
  1675. 280008: 'Регенерация',
  1676. 280009: 'Ошеломление',
  1677. 280010: 'Ошеломление',
  1678. 280011: 'Дезориентация',
  1679. 280012: 'Ускорение',
  1680. 280013: 'Сильный удар',
  1681. 280014: 'Сильный удар',
  1682. 280015: 'Вампиризм',
  1683. 280016: 'Вампиризм',
  1684. 280017: 'Лечение',
  1685. 280018: 'Безрассудная атака',
  1686. 280019: 'Безрассудная атака',
  1687. 580003: 'Спутник увернулся',
  1688. 580004: 'Спутник ранен',
  1689. };
  1690. const ACTION_TYPE_TEXTS = {
  1691. [0 /* idle */]: 'безделие',
  1692. [1 /* quest */]: 'задание',
  1693. [2 /* walk */]: 'путешествие между городами',
  1694. [3 /* fight */]: 'сражение 1x1 с монстром',
  1695. [4 /* dead */]: 'воскрешение',
  1696. [5 /* city */]: 'действия в городе',
  1697. [6 /* rest */]: 'отдых',
  1698. [7 /* equip */]: 'экипировка',
  1699. [8 /* trade */]: 'торговля',
  1700. [9 /* nearcity */]: 'путешествие около города',
  1701. [10 /* energy */]: 'восстановление энергии',
  1702. [11 /* noeffect */]: 'действие без эффекта на игру',
  1703. [12 /* proxy */]: 'прокси-действия для взаимодействия героев',
  1704. [13 /* pvp */]: 'PvP 1x1',
  1705. [15 /* companionHeal */]: 'уход за спутником',
  1706. };
  1707.  
  1708. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/tabs/stats/Stats.ts
  1709. ///<reference path="../../typings.d.ts"/>
  1710.  
  1711.  
  1712.  
  1713.  
  1714.  
  1715. const statsList = [
  1716. 1,
  1717. 11,
  1718. 12,
  1719. 280000,
  1720. 280001,
  1721. 280002,
  1722. 280003,
  1723. 280004,
  1724. 280005,
  1725. 280006,
  1726. 280007,
  1727. 280008,
  1728. 280009,
  1729. 280010,
  1730. 280011,
  1731. 280012,
  1732. 280013,
  1733. 280014,
  1734. 280015,
  1735. 280016,
  1736. 280017,
  1737. 280018,
  1738. 280019,
  1739. 580003,
  1740. 580004,
  1741. ];
  1742. class Stats_Stats {
  1743. constructor() {
  1744. this.tab = createTab('статистика');
  1745. this.statistics = [];
  1746. }
  1747. static drawCellByStat(stat) {
  1748. if (!stat)
  1749. return '';
  1750. const phraseId = stat.phraseId;
  1751. const averagePhraseData = {};
  1752. Object.keys(stat.phraseData).forEach((key) => {
  1753. const value = stat.phraseData[key];
  1754. if (PHRASE_NUMBER_KEYS.includes(key)) {
  1755. if (value) {
  1756. averagePhraseData[key] = Math.round(value / stat.count);
  1757. }
  1758. }
  1759. else {
  1760. averagePhraseData[key] = value;
  1761. }
  1762. });
  1763. const cell = `<span title="${stat.example}\n${JSON.stringify(averagePhraseData).replace(/"/g, '&quot;')}">` +
  1764. `${act_fight_defaultExport[phraseId].fn(averagePhraseData)}x${stat.count}` +
  1765. `</span>`;
  1766. return cell;
  1767. }
  1768. static drawTotalCount(count, icon = '') {
  1769. return `<span class="act">${icon}x${count}</span>`;
  1770. }
  1771. addToStats(messages) {
  1772. this.addPhrases(messages);
  1773. this.drawStats();
  1774. }
  1775. clear() {
  1776. this.statistics = [];
  1777. this.tab.$content.html('');
  1778. }
  1779. addPhrases(messages) {
  1780. for (let i = 0; i < messages.length; i++) {
  1781. const message = messages[i];
  1782. const phraseId = message[3 /* PhraseId */];
  1783. if (statsList.includes(phraseId)) {
  1784. this.addPhrase(message);
  1785. }
  1786. }
  1787. }
  1788. addPhrase(message) {
  1789. const phraseSting = message[2 /* PhraseSting */];
  1790. const phraseId = message[3 /* PhraseId */];
  1791. const phraseData = message[4 /* PhraseData */];
  1792. const phraseMeta = message[5 /* PhraseMeta */];
  1793. const owner = phraseMeta.owner;
  1794. const statInList = this.statistics.find(s => s.owner === owner && s.phraseId === phraseId);
  1795. if (!statInList) {
  1796. this.statistics.push({
  1797. owner: owner,
  1798. phraseId: phraseId,
  1799. count: 1,
  1800. example: phraseSting,
  1801. phraseData: phraseData,
  1802. });
  1803. }
  1804. else {
  1805. statInList.count++;
  1806. for (let i = 0; i < PHRASE_NUMBER_KEYS.length; i++) {
  1807. const numberKey = PHRASE_NUMBER_KEYS[i];
  1808. const value = phraseData[numberKey];
  1809. if (value) {
  1810. statInList.phraseData[numberKey] = (statInList.phraseData[numberKey] || 0) + value;
  1811. }
  1812. }
  1813. }
  1814. }
  1815. drawStats() {
  1816. const phraseIds = [];
  1817. for (let i = 0; i < this.statistics.length; i++) {
  1818. const stat = this.statistics[i];
  1819. if (!phraseIds.includes(stat.phraseId))
  1820. phraseIds.push(stat.phraseId);
  1821. }
  1822. phraseIds.sort((a, b) => a - b);
  1823. let html = ``;
  1824. let countMe = 0;
  1825. let countCompanion = 0;
  1826. let countMob = 0;
  1827. for (let i = 0; i < phraseIds.length; i++) {
  1828. const phraseId = phraseIds[i];
  1829. const text = PHRASE_ID_TO_TEXT[phraseId];
  1830. const statsMe = this.statistics.find(s => s.owner === 0 /* me */ && s.phraseId === phraseId);
  1831. const statsCompanion = this.statistics.find(s => s.owner === 2 /* companion */ && s.phraseId === phraseId);
  1832. const statsMob = this.statistics.find(s => s.owner === 1 /* mob */ && s.phraseId === phraseId);
  1833. if (statsMe)
  1834. countMe += statsMe.count;
  1835. if (statsCompanion)
  1836. countCompanion += statsCompanion.count;
  1837. if (statsMob)
  1838. countMob += statsMob.count;
  1839. html +=
  1840. `<tr>` +
  1841. `<th>${text}</th>` +
  1842. `<td>${Stats_Stats.drawCellByStat(statsMe) +
  1843. (statsMe && statsCompanion ? `<br>` : '') +
  1844. Stats_Stats.drawCellByStat(statsCompanion)}</td>` +
  1845. `<td>${Stats_Stats.drawCellByStat(statsMob)}</td>` +
  1846. `</tr>`;
  1847. }
  1848. html +=
  1849. `<tr>` +
  1850. `<th>Всего кол-во</th>` +
  1851. `<td>${Stats_Stats.drawTotalCount(countMe) +
  1852. (countCompanion
  1853. ? `<br>${Stats_Stats.drawTotalCount(countCompanion, icons_defaultExport.companion)}`
  1854. : '')}</td>` +
  1855. `<td>${Stats_Stats.drawTotalCount(countMob)}</td>` +
  1856. `</tr>`;
  1857. const $root = this.tab.$content;
  1858. $root.html(`<table class="table-stats">` +
  1859. `<thead>` +
  1860. `<tr>` +
  1861. `<td></td>` +
  1862. `<td>Герой</td>` +
  1863. `<td>Моб</td>` +
  1864. `</tr>` +
  1865. `</thead>` +
  1866. `<tbody>` +
  1867. html +
  1868. `</tbody>` +
  1869. `</table>`
  1870. // `<pre>${JSON.stringify(this.statistics, null, 2)}</pre>`
  1871. );
  1872. }
  1873. }
  1874.  
  1875. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/notifications/Notifications.ts
  1876. ///<reference path="../typings.d.ts"/>
  1877.  
  1878.  
  1879. class Notifications_Notifications {
  1880. constructor() {
  1881. this.lastNotifyMessagesText = '';
  1882. }
  1883. static isSameQuest(q1, q2) {
  1884. return Notifications_Notifications.questTests.every(key => q1[key] === q2[key]);
  1885. }
  1886. check(hero, settingsValues) {
  1887. if (!settingsValues.notify)
  1888. return;
  1889. this.checkHero(hero, settingsValues);
  1890. this.checkQuests(hero.quests.quests, settingsValues);
  1891. }
  1892. checkHero(hero, settingsValues) {
  1893. if (!settingsValues.notify)
  1894. return;
  1895. const notifyMessages = [];
  1896. const minHp = settingsValues.notifyHeroHpLowerValue;
  1897. if (settingsValues.notifyHeroHp && minHp) {
  1898. const health = hero.base.health;
  1899. if (health < minHp) {
  1900. notifyMessages.push(`Низкое здоровье: ${health} HP`);
  1901. }
  1902. }
  1903. const maxEnergy = settingsValues.notifyHeroEnergyGreaterValue;
  1904. if (settingsValues.notifyHeroEnergy && maxEnergy) {
  1905. const energy = hero.energy.value;
  1906. if (energy > maxEnergy) {
  1907. notifyMessages.push(`Энергия накопилась: ${energy}`);
  1908. }
  1909. }
  1910. if (settingsValues.notifyHeroIdle) {
  1911. const actionType = hero.action.type;
  1912. if (actionType === 0) {
  1913. notifyMessages.push('Герой бездействует');
  1914. }
  1915. }
  1916. if (notifyMessages.length) {
  1917. const notifyMessagesText = notifyMessages.join('\n');
  1918. if (notifyMessagesText !== this.lastNotifyMessagesText) {
  1919. sendNotify(`The Tale Extended - ${storage_defaultExport.heroName}`, {
  1920. tag: 'send',
  1921. body: notifyMessagesText,
  1922. });
  1923. }
  1924. this.lastNotifyMessagesText = notifyMessagesText;
  1925. }
  1926. }
  1927. checkQuests(quests, settingsValues) {
  1928. const line = quests[1].line;
  1929. const lineOld = this.lastQuests && this.lastQuests[1] && this.lastQuests[1].line || [];
  1930. const newLines = [];
  1931. for (let i = 0; i < line.length; i++) {
  1932. const q = line[i];
  1933. const qOld = lineOld[i];
  1934. if (!qOld || !Notifications_Notifications.isSameQuest(q, qOld)) {
  1935. if (settingsValues.notify &&
  1936. settingsValues.notifyQuestChoose &&
  1937. q.choice_alternatives &&
  1938. q.choice_alternatives.length) {
  1939. sendNotify(q.name, {
  1940. tag: 'quest',
  1941. body: `${storage_defaultExport.heroName} ${q.action}!`,
  1942. icon: `${window.extPath}img/quest/caravan.png`,
  1943. addTime: true,
  1944. });
  1945. }
  1946. newLines.push(q);
  1947. }
  1948. }
  1949. this.lastQuests = quests;
  1950. }
  1951. }
  1952. Notifications_Notifications.questTests = ['action', 'choice', 'name', 'type', 'uid'];
  1953.  
  1954. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/auto/Auto.ts
  1955. ///<reference path="../typings.d.ts"/>
  1956.  
  1957.  
  1958.  
  1959. class Auto_Auto {
  1960. constructor() {
  1961. this.lastquest = '';
  1962. }
  1963. check(hero, settingsValues) {
  1964. setTimeout(() => {
  1965. this.checkHero(hero, settingsValues);
  1966. this.checkQuest(hero, settingsValues);
  1967. }, 1000);
  1968. }
  1969. checkHero(hero, settingsValues) {
  1970. const actionType = hero.action.type;
  1971. const actionPercent = hero.action.percents;
  1972. const energy = hero.energy.value;
  1973. let energyBonus = settingsValues.autohelpEnergyBonus ? hero.energy.bonus - settingsValues.autohelpEnergyBonusMax : 0;
  1974. if (energyBonus < 0)
  1975. energyBonus = 0;
  1976. if (energy + energyBonus < 4)
  1977. return;
  1978. const isFight = actionType === 3 /* fight */;
  1979. const isRest = actionType < 10 && actionType !== 3 /* fight */;
  1980. const isBoss = !!hero.action.is_boss;
  1981. if (settingsValues.autohelpHp &&
  1982. hero.base.health < settingsValues.autohelpHpLowerValue &&
  1983. isFight &&
  1984. (!settingsValues.autohelpHpBoss || isBoss)) {
  1985. godHelp(`Низкое здоровье: ${hero.base.health}`);
  1986. return;
  1987. }
  1988. const isHeplingCompanion = actionType === 15 /* companionHeal */;
  1989. if (settingsValues.autohelpCompanion && isHeplingCompanion && hero.companion.health < settingsValues.autohelpCompanionHp) {
  1990. godHelp(`Низкое здоровье спутника: ${hero.companion.health}`);
  1991. return;
  1992. }
  1993. if (settingsValues.autohelpEnergy && energy > settingsValues.autohelpEnergyGreaterValue && ((settingsValues.autohelpEnergyFight && isFight) ||
  1994. (settingsValues.autohelpEnergyRest && isRest) ||
  1995. (settingsValues.autohelpEnergyWalk && actionType === 2 /* walk */) ||
  1996. (settingsValues.autohelpEnergyTradeMed && (actionType === 8 /* trade */ || actionType === 10 /* energy */)))) {
  1997. godHelp(`Накопилась энергия: ${energy}`);
  1998. return;
  1999. }
  2000. if (settingsValues.autohelpIdle && actionType === 0 && !isFight && actionPercent > 0 && actionPercent < 0.8) {
  2001. godHelp('Герой бездействует');
  2002. return;
  2003. }
  2004. if (settingsValues.autohelpDead && actionType === 4 && !isFight && actionPercent > 0 && actionPercent < 0.8) {
  2005. godHelp('Герой умер');
  2006. return;
  2007. }
  2008. const hasCard = !$('.pgf-get-card-button').hasClass('pgf-hidden');
  2009. if (settingsValues.autocard && hasCard) {
  2010. $('.pgf-get-card-button a').trigger('click');
  2011. return;
  2012. }
  2013. const hasModal = $('.modal-header') && ($('.pgf-dialog-title').text() === 'Вы получаете новую карту!');
  2014. if (hasModal) {
  2015. $('.pgf-dialog-button-0').trigger('click');
  2016. return;
  2017. }
  2018. return;
  2019. function godHelp(msg) {
  2020. const ability = 'help';
  2021. console.log(`god ${ability}!`, actionType, msg, Object.assign({}, hero));
  2022. if (settingsValues.autohelpNotify) {
  2023. sendNotify(`The Tale Extended - ${storage_defaultExport.heroName}`, {
  2024. tag: 'autohelp',
  2025. body: `Сработала автоматическая помощь
  2026. ${msg}
  2027. Текущее действие: ${ACTION_TYPE_TEXTS[actionType]}`,
  2028. addTime: true,
  2029. });
  2030. }
  2031. if (!settingsValues.autohelp) {
  2032. return;
  2033. }
  2034. // return;
  2035. const url = `/game/abilities/${ability}/api/use?api_version=1.0&api_client=${window.API_CLIENT}`;
  2036. hero.energy.value -= 4;
  2037. // const csrf = document.head.innerHTML.match(/"X-CSRFToken"[^"]*(".*")/)[1].replace(/"/g, '');
  2038. $.ajax({
  2039. url,
  2040. dataType: 'json',
  2041. type: 'post',
  2042. // beforeSend: function(xhr) {
  2043. // xhr.setRequestHeader('X-CSRFToken', csrf);
  2044. // },
  2045. data: {},
  2046. });
  2047. }
  2048. }
  2049. checkQuest(hero, settingsValues) {
  2050. const selectChoices = {
  2051. peacePlus: settingsValues.autoquestPeacePlus,
  2052. peaceMinus: settingsValues.autoquestPeaceMinus,
  2053. honorPlus: settingsValues.autoquestHonorPlus,
  2054. honorMinus: settingsValues.autoquestHonorMinus,
  2055. };
  2056. const quests = hero.quests.quests;
  2057. const line = quests[1].line;
  2058. for (let i = 0; i < line.length; i++) {
  2059. const q = line[i];
  2060. for (let choiceIndex = 0; choiceIndex < q.choice_alternatives.length; choiceIndex++) {
  2061. const choiceName = q.choice_alternatives[choiceIndex][1];
  2062. const option_uid = q.choice_alternatives[choiceIndex][0];
  2063. for (const reward in Auto_Auto.CHOICES) {
  2064. if (selectChoices[reward] &&
  2065. Auto_Auto.CHOICES.hasOwnProperty(reward) &&
  2066. Auto_Auto.CHOICES[reward].includes(choiceName)) {
  2067. this.chooseQuest(option_uid, choiceName, settingsValues);
  2068. }
  2069. }
  2070. }
  2071. }
  2072. }
  2073. chooseQuest(uid, name, settingsValues) {
  2074. if (settingsValues.autoquestNotify && this.lastquest !== name) {
  2075. this.lastquest = name;
  2076. sendNotify(`The Tale Extended - ${storage_defaultExport.heroName}`, {
  2077. tag: 'autoquest',
  2078. body: `Сделан выбор! \n ${name}`,
  2079. addTime: true,
  2080. icon: `${window.extPath}img/quest/caravan.png`,
  2081. });
  2082. }
  2083. if (!settingsValues.autoquest) {
  2084. return;
  2085. }
  2086. // const csrf = document.head.innerHTML.match(/("X-CSRFToken")(.*)(".*")/, 'g')[3].replace(/"/g, '');
  2087. $.ajax({
  2088. url: `/game/quests/api/choose?api_version=1.0&api_client=${window.API_CLIENT}&option_uid=${encodeURIComponent(uid)}`,
  2089. dataType: 'json',
  2090. type: 'post',
  2091. // beforeSend: function(xhr) {
  2092. // xhr.setRequestHeader('X-CSRFToken', csrf);
  2093. // },
  2094. data: {},
  2095. });
  2096. }
  2097. }
  2098. Auto_Auto.CHOICES = {
  2099. /* peacefullnes */
  2100. peacePlus: [
  2101. 'прибегнуть к дипломатии',
  2102. ],
  2103. peaceMinus: [
  2104. 'задействовать грубую силу',
  2105. ],
  2106. honorPlus: [
  2107. 'довести дело до конца',
  2108. 'защищать торговца',
  2109. 'честно выполнить свои обязательства',
  2110. ],
  2111. honorMinus: [
  2112. 'поддаться укорам совести и раскрыться',
  2113. 'шантажировать самостоятельно',
  2114. 'присвоить письмо и продать',
  2115. 'украсть-украсть-украсть',
  2116. 'подделать письмо',
  2117. ],
  2118. };
  2119.  
  2120. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/js/utils/fixHtml.ts
  2121. function fixHtml(isFix) {
  2122. $('html').toggleClass('ext-html', isFix);
  2123. }
  2124.  
  2125. // CONCATENATED MODULE: D:/dev/github/the-tale-ext/source/ext.ts
  2126. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__ext_css__ = __webpack_require__(28);
  2127. /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__ext_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8__ext_css__);
  2128.  
  2129.  
  2130.  
  2131.  
  2132.  
  2133.  
  2134.  
  2135.  
  2136.  
  2137.  
  2138. const tracking = new Tracking_Tracking();
  2139. const shortMessages = new ShortMessages_ShortMessages();
  2140. const stats = new Stats_Stats();
  2141. const settings = new Settings_Settings();
  2142. const notifications = new Notifications_Notifications();
  2143. const auto = new Auto_Auto();
  2144. tracking.onLoad(() => {
  2145. const pastMessages = tracking.getMessagesLog();
  2146. shortMessages.addMessages(pastMessages.slice(pastMessages.length - 1000));
  2147. stats.addToStats(pastMessages);
  2148. });
  2149. tracking.onNewMessages(messages => {
  2150. shortMessages.addMessages(messages);
  2151. stats.addToStats(messages);
  2152. });
  2153. tracking.onNewTurn(hero => {
  2154. notifications.check(hero, settings.settingsValues);
  2155. auto.check(hero, settings.settingsValues);
  2156. });
  2157. settings.onCleanup(() => {
  2158. tracking.clear();
  2159. stats.clear();
  2160. shortMessages.clear();
  2161. });
  2162. fixHtml(settings.settingsValues.extHtml);
  2163. settings.onNamedSettingChange('extHtml', fixHtml);
  2164. tracking.setMaxLogLength(settings.settingsValues.maxLogLength);
  2165. settings.onNamedSettingChange('maxLogLength', tracking.setMaxLogLength);
  2166. window.ext = {
  2167. tracking,
  2168. shortMessages,
  2169. stats,
  2170. settings,
  2171. notifications,
  2172. };
  2173.  
  2174. // CONCATENATED MODULE: ./the-tale-extension.user.js
  2175.  
  2176.  
  2177.  
  2178. /***/ }),
  2179. /* 1 */
  2180. /***/ (function(module, exports) {
  2181.  
  2182. module.exports = jQuery;
  2183.  
  2184. /***/ }),
  2185. /* 2 */
  2186. /***/ (function(module, exports) {
  2187.  
  2188. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 486.991 486.991\">\r\n <path d=\"M415.143 58.34c3.685-3.79 9.73-3.863 13.516-.178 3.778 3.666 3.86 9.72.177 13.507-.048.046-.13.13-.188.176L303.493 193.588l24.31 26.475L452.25 105.82c12.09-11.092 20.316-25.765 23.478-41.866l11.148-56.81c.382-1.958-.233-3.973-1.643-5.39C483.817.344 481.8-.27 479.843.112L423.035 11.26c-16.1 3.16-30.775 11.39-41.865 23.478L269.426 156.47l24.414 26.596L415.143 58.34zM161.5 274.043l-51.735 56.37c-17.35-12.004-37.024-20.932-58.507-25.38-10.344-2.166-20.437 4.486-22.573 14.83-2.146 10.327 4.495 20.44 14.83 22.574 15.803 3.275 30.29 9.787 43.172 18.45l-71.397 55.42C6.335 423.258.803 433.718.084 445.03c-.71 11.305 3.48 22.377 11.493 30.392 7.424 7.433 17.48 11.566 27.92 11.566.82 0 1.64-.018 2.472-.074 11.313-.71 21.77-6.24 28.72-15.196l54.177-69.793c6.12 10.83 10.746 22.622 13.36 35.223 1.864 9.03 9.81 15.233 18.682 15.233 1.287 0 2.582-.13 3.89-.4 10.335-2.136 16.977-12.248 14.832-22.574-3.805-18.405-11.037-35.4-20.476-50.857l60.092-55.168-53.75-49.34z\"/>\r\n <path d=\"M471.7 416.308l-54.935-42.64-16.464-12.78c12.147-8.17 32.236-15.34 43.174-18.45 10.944-3.114 16.977-12.248 14.832-22.574-2.146-10.345-12.324-17.014-22.575-14.832-8.135 1.688-16.007 4.03-23.618 6.876-12.51 4.672-24.103 11.043-34.888 18.506L105.82 34.738c-11.092-12.09-25.766-20.316-41.864-23.48L7.146.113C6.763.038 6.38 0 5.998 0 4.422 0 2.89.625 1.753 1.754.346 3.17-.27 5.187.114 7.146L11.26 63.954c3.162 16.1 11.39 30.774 23.48 41.865l297.09 272.728c-6.956 11.39-12.47 23.684-16.453 36.753-1.418 4.665-3.022 9.265-4.02 14.106-2.145 10.326 4.496 20.438 14.83 22.574 1.308.27 2.605.4 3.89.4 6.57 0 12.595-3.422 16.056-8.852 1.213-1.902 2.145-4.028 2.63-6.38 2.612-12.6 7.24-24.392 13.358-35.223l11.53 14.85 42.648 54.943c6.95 8.957 17.408 14.487 28.722 15.196 11.305.708 22.38-3.47 30.393-11.492 8.013-8.015 12.2-19.087 11.49-30.393-.717-11.314-6.247-21.772-15.204-28.722zM266.664 266.562c-2.18 2.24-5.772 2.297-8.02.113L58.338 71.845c-.057-.046-.14-.13-.188-.176-3.685-3.79-3.6-9.842.176-13.508 3.79-3.685 9.834-3.61 13.52.177l194.817 200.313c2.127 2.19 2.146 5.7 0 7.91z\"/>\r\n</svg>"
  2189.  
  2190. /***/ }),
  2191. /* 3 */
  2192. /***/ (function(module, exports) {
  2193.  
  2194. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 492.904 492.904\">\r\n <path d=\"M246.452.002C110.342.002 0 110.342 0 246.452c0 136.11 110.342 246.45 246.452 246.45s246.452-110.34 246.452-246.45c0-136.11-110.34-246.45-246.452-246.45zm197.16 246.45c0 44.22-14.81 84.942-39.488 117.867L271.097 231.264V51.002C368.2 63.195 443.61 146.108 443.61 246.452zM221.808 441.906c-37.144-4.66-71.115-19.607-98.89-42.022l98.89-98.885v140.907zm49.287-140.923l98.9 98.9c-27.788 22.415-61.757 37.362-98.9 42.022V300.982zM221.81 51.002v180.28L88.774 364.32C64.1 331.395 49.29 290.673 49.29 246.454c0-100.346 75.414-183.26 172.52-195.452z\"/>\r\n</svg>"
  2195.  
  2196. /***/ }),
  2197. /* 4 */
  2198. /***/ (function(module, exports) {
  2199.  
  2200. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 290.226 290.226\">\r\n <path d=\"M63.95 243.575c-1.944-3.578-4.4-6.907-7.362-9.87-3.106-3.1-6.626-5.632-10.4-7.63-4.51-2.386-.945-7.5-.945-7.5 4.616-7.022 8.825-14.078 12.305-20.225l-23.363-23.344h-22.68c-4.363 0-7.9-3.54-7.9-7.902 0-4.36 3.537-7.9 7.9-7.9H37.45c2.1 0 4.108.832 5.59 2.312l85.378 85.29c1.483 1.484 2.315 3.496 2.315 5.59v26.073c0 4.364-3.537 7.896-7.9 7.896-4.367 0-7.904-3.53-7.904-7.897v-22.8l-23.27-23.24c-6.282 3.708-13.583 8.253-20.817 13.25 0 0-4.145 2.95-6.892-2.105zM26.61 237.102c-7.106 0-13.784 2.764-18.812 7.784C2.778 249.9.016 256.572.016 263.664c0 7.097 2.764 13.762 7.782 18.776 5.027 5.016 11.706 7.783 18.812 7.785 7.102 0 13.78-2.77 18.804-7.785 5.023-5.015 7.79-11.682 7.79-18.776 0-7.093-2.768-13.764-7.79-18.778-5.022-5.02-11.702-7.784-18.804-7.784zM100.985 182.318c-3.502 3.5-9.232 3.5-12.734 0l-8.81-8.8c-3.5-3.498-3.5-9.223 0-12.72L229.833 10.563c3.502-3.498 10.4-6.727 15.33-7.175L282.024.036c4.93-.448 8.596 3.218 8.148 8.148l-3.346 36.79c-.448 4.93-3.68 11.826-7.182 15.325l-150.4 150.25c-3.502 3.5-9.232 3.5-12.734 0l-8.822-8.812c-3.502-3.498-3.502-9.223 0-12.722l125.92-125.803c1.854-1.848 1.856-4.852.003-6.702-1.847-1.852-4.852-1.852-6.708 0L100.985 182.317z\"/>\r\n</svg>"
  2201.  
  2202. /***/ }),
  2203. /* 5 */
  2204. /***/ (function(module, exports) {
  2205.  
  2206. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512.012 512.012\">\r\n <path d=\"M505.756 475.587l-225.26-225.26 14.145-14.143c8.32-8.34 8.32-21.845 0-30.165l-7.636-7.638c13.035-6.656 46.293-8.384 90.453 7.7 5.952 2.156 12.63 1.558 18.112-1.663s9.258-8.726 10.24-15.02c.554-3.307 12.394-81.94-46.892-141.205C299.698-11.048 221.04.792 217.734 1.305c-6.293 1.002-11.797 4.778-15.02 10.26-3.22 5.483-3.84 12.117-1.642 18.09 16.98 46.72 18.54 82.69 13.312 96.108l-7.424-7.424c-3.99-4.012-9.408-6.252-15.083-6.252s-11.072 2.24-15.083 6.25l-58.453 58.454c-4.01 4.01-6.25 9.43-6.25 15.083s2.24 11.093 6.25 15.083l7.425 7.424c-13.42 5.227-49.344 3.67-96.085-13.333-5.952-2.177-12.63-1.558-18.112 1.642-5.483 3.243-9.26 8.747-10.26 15.02-.534 3.306-12.374 81.94 46.91 141.204 41.708 41.728 92.993 48.213 120.897 48.213 11.733 0 19.307-1.153 20.288-1.324 6.293-1.003 11.797-4.757 15.02-10.24 3.22-5.483 3.84-12.117 1.642-18.112-16.043-44.16-14.336-77.44-7.68-90.453l7.637 7.638c4.18 4.16 9.62 6.25 15.083 6.25 5.46 0 10.923-2.09 15.083-6.25l14.144-14.144L475.59 505.752c4.16 4.16 9.62 6.25 15.083 6.25s10.923-2.09 15.083-6.25c8.34-8.34 8.34-21.824 0-30.165z\"/>\r\n</svg>"
  2207.  
  2208. /***/ }),
  2209. /* 6 */
  2210. /***/ (function(module, exports) {
  2211.  
  2212. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 533.333 533.333\">\r\n <path d=\"M165.494 533.333C129.95 459.37 148.878 416.99 176.197 377.06c29.917-43.727 37.627-87.012 37.627-87.012s23.518 30.573 14.11 78.39c41.548-46.25 49.39-119.938 43.115-148.16 93.913 65.63 134.05 207.738 79.96 313.055 287.694-162.776 71.56-406.34 33.933-433.775 12.543 27.435 14.922 73.88-10.416 96.42C331.635 33.333 225.583 0 225.583 0c12.543 83.877-45.466 175.596-101.404 244.13-1.966-33.446-4.054-56.525-21.642-88.53-3.948 60.757-50.38 110.284-62.955 171.16C22.55 409.2 52.34 469.562 165.493 533.333z\"/>\r\n</svg>"
  2213.  
  2214. /***/ }),
  2215. /* 7 */
  2216. /***/ (function(module, exports) {
  2217.  
  2218. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 611.999 611.999\">\r\n <path d=\"M216.02 611.195c5.978 3.178 12.284-3.704 8.624-9.4-19.866-30.92-38.678-82.947-8.706-149.952 49.982-111.737 80.396-169.61 80.396-169.61s16.177 67.537 60.03 127.586c42.204 57.792 65.305 130.477 28.063 191.028-3.495 5.683 2.668 12.388 8.607 9.35 46.1-23.583 97.806-70.886 103.64-165.018 2.15-28.764-1.075-69.034-17.206-119.85-20.74-64.407-46.24-94.46-60.992-107.366-4.413-3.86-11.276-.44-10.914 5.413 4.3 69.494-21.845 87.13-36.726 47.386-5.943-15.874-9.41-43.33-9.41-76.766 0-55.665-16.15-112.967-51.754-159.53-9.26-12.11-20.093-23.425-32.523-33.074-4.5-3.494-11.024.018-10.612 5.7 2.734 37.736.257 145.885-94.624 275.09-86.03 119.85-52.693 211.895-40.864 236.825 22.616 47.76 54.162 75.806 84.97 92.187z\"/>\r\n</svg>"
  2219.  
  2220. /***/ }),
  2221. /* 8 */
  2222. /***/ (function(module, exports) {
  2223.  
  2224. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 383.344 383.345\">\r\n <path d=\"M273.217 106.9C246.037 62.034 215.804 23.205 200.2 4.052 198.114 1.488 194.98 0 191.674 0c-3.308 0-6.44 1.49-8.53 4.054-15.6 19.16-45.833 58-73.014 102.87-35.03 57.822-52.79 105.63-52.79 142.09 0 74.07 60.26 134.33 134.332 134.33s134.332-60.26 134.332-134.33c0-36.485-17.758-84.3-52.787-142.115zm-63.11 226.968c-7.845 2.006-15.987 3.022-24.206 3.022-50.185 0-91.014-37.93-91.014-84.55 0-11.255 2.97-24.405 8.825-39.083.99-2.48 3.808-3.895 6.586-3.295 2.776.598 4.64 3.018 4.354 5.65-.342 3.148-.516 6.223-.516 9.136 0 50.735 40.88 93.22 95.093 98.82 2.698.28 4.803 2.298 5.018 4.813.216 2.516-1.522 4.818-4.14 5.488z\"/>\r\n</svg>"
  2225.  
  2226. /***/ }),
  2227. /* 9 */
  2228. /***/ (function(module, exports) {
  2229.  
  2230. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 264.695 264.695\">\r\n <path d=\"M219.17 216.785c-4.76 0-10.32 2.3-16.67 6.88L167.287 210.7l35.734-12.978c6.003 3.888 11.558 5.833 16.682 5.833 5.64 0 9.347-2.917 11.117-8.733.352-1.235.528-2.57.528-3.98 0-7.398-4.766-11.38-14.295-11.9 3.876-3.883 5.828-7.688 5.828-11.393 0-3.87-2.038-7.15-6.09-9.797-2.12-1.05-4.326-1.584-6.616-1.584-7.77 0-13.064 6.258-15.887 18.797l-61.94 23.04-61.94-22.505c-2.824-12.885-8.126-19.332-15.886-19.332-2.292 0-4.5.535-6.62 1.584-3.875 2.647-5.82 5.926-5.82 9.797 0 3.705 1.945 7.51 5.82 11.392-9.7.52-14.554 4.502-14.554 11.9 0 1.41.18 2.746.526 3.98 1.946 5.816 5.65 8.733 11.122 8.733 5.113 0 10.67-1.945 16.677-5.832l36 12.978-35.477 12.698c-6.175-4.406-11.637-6.61-16.402-6.61-5.653 0-9.622 2.917-11.918 8.732-.348 1.235-.526 2.553-.526 3.975 0 7.405 4.853 11.385 14.555 11.907-3.875 3.883-5.82 7.688-5.82 11.393 0 3.87 1.945 7.134 5.82 9.797 2.478 1.412 4.855 2.105 7.154 2.105 7.227 0 12.443-6.176 15.62-18.525l61.672-22.504 61.678 22.504c3.178 12.35 8.475 18.525 15.882 18.525 2.12 0 4.407-.693 6.884-2.105 4.052-2.663 6.092-5.928 6.092-9.797 0-3.705-1.953-7.51-5.828-11.393 9.528-.522 14.295-4.502 14.295-11.907 0-1.422-.178-2.74-.528-3.975-2.12-5.816-6.002-8.733-11.65-8.733z\"/>\r\n <path d=\"M48.436 128.904c9.703 11.114 23.38 19.242 41.035 24.346v3.986c0 4.936 1.673 9.086 5.026 12.433 3.35 3.357 7.498 5.21 12.44 5.562 5.117.357 8.906-.528 11.38-2.646 3.878 2.817 8.203 4.23 12.973 4.23 4.41 0 8.473-1.317 12.174-3.964 2.47 1.934 6.087 2.738 10.856 2.38 4.937-.527 9.09-2.425 12.44-5.688 3.35-3.28 5.025-7.37 5.025-12.307v-2.91c19.057-4.945 33.795-13.237 44.21-24.898 10.06-11.11 15.087-24.254 15.087-39.436 0-3.36-.355-6.886-1.063-10.597-3.526-22.57-13.94-41.2-31.23-55.844C180.612 7.856 158.464 0 132.347 0c-26.123 0-48.27 7.767-66.44 23.282C48.61 38.118 38.29 56.825 34.937 79.396c-.71 3.71-1.064 7.238-1.064 10.597 0 14.824 4.85 27.785 14.563 38.91zm104.43-68.155c5.205-6.086 11.513-9.13 18.92-9.13 7.593 0 13.987 3.044 19.195 9.13 5.2 6.075 7.81 13.445 7.81 22.086 0 8.65-2.608 16.02-7.81 22.108-5.207 6.097-11.602 9.13-19.193 9.13-7.408 0-13.716-3.033-18.922-9.13-5.21-6.087-7.814-13.46-7.814-22.108 0-8.64 2.604-16.01 7.815-22.087zm-28.06 60.678c2.555-3.307 5.064-4.968 7.54-4.968 2.47 0 4.803 1.83 7.013 5.51 2.204 3.66 3.316 7.144 3.316 10.468 0 5.062-3.36 7.58-10.067 7.58-4.415 0-7.678-1.135-9.793-3.395-1.237-1.41-1.85-3.147-1.85-5.25.002-3.308 1.278-6.62 3.838-9.945zm-53.34-60.68c5.294-6.084 11.65-9.13 19.058-9.13 7.406 0 13.762 3.046 19.06 9.13 5.296 6.077 7.948 13.447 7.948 22.088 0 8.65-2.65 16.02-7.948 22.108-5.297 6.097-11.654 9.13-19.06 9.13-7.41 0-13.764-3.033-19.06-9.13-5.29-6.087-7.943-13.46-7.943-22.108 0-8.64 2.653-16.01 7.945-22.087z\"/>\r\n</svg>"
  2231.  
  2232. /***/ }),
  2233. /* 10 */
  2234. /***/ (function(module, exports) {
  2235.  
  2236. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 297.288 297.288\">\r\n <path d=\"M.207 83.397c8.326 37.91 36.12 147.72 36.12 147.72 1.455 5.892 6.74 9.964 12.743 9.964.262 0 .524-.017.79-.032 6.322-.377 11.475-5.22 12.25-11.505l9.982-80.853 13.583 9.816c4.592 3.32 10.793 3.32 15.388 0l20.256-14.643 20.255 14.642c2.297 1.66 4.995 2.49 7.693 2.49 2.697 0 5.396-.83 7.692-2.49l20.26-14.644 20.26 14.646c4.593 3.318 10.796 3.318 15.387 0l12.602-9.107 9.9 80.28c.774 6.286 5.93 11.124 12.252 11.5.265.017.526.024.787.024 6.003 0 11.29-4.093 12.743-9.986 0 0 27.42-110.076 35.896-146.174 1.657-7.062-5.69-14.236-12.943-14.236H13.374c-7.252 0-14.722 5.506-13.167 12.59zm44.56 72.635L30.142 96.807h21.934l-7.31 59.224zm160.41-24.374l-20.264-14.644c-4.593-3.32-10.795-3.32-15.386 0l-20.26 14.643-20.255-14.642c-4.594-3.32-10.795-3.32-15.388 0L93.37 131.658l-17.606-12.545 2.776-22.306h140.4l2.86 23.017-16.624 11.836zm47.54 24.448l-7.313-59.3h21.94l-14.628 59.3zM78.41 271.02c-3.456 0-6.84 1.394-9.286 3.84-2.444 2.444-3.848 5.83-3.848 9.294 0 3.455 1.403 6.84 3.848 9.284 2.445 2.445 5.83 3.85 9.285 3.85 3.452 0 6.836-1.404 9.28-3.85 2.445-2.444 3.85-5.83 3.85-9.283 0-3.464-1.404-6.85-3.85-9.294-2.444-2.444-5.83-3.837-9.282-3.837z\"/>\r\n <path d=\"M100.046 179.227c-3.454 0-6.84 1.405-9.284 3.85-2.444 2.445-3.85 5.828-3.85 9.283 0 3.456 1.405 6.84 3.85 9.284 2.445 2.444 5.83 3.85 9.284 3.85 3.455 0 6.84-1.405 9.283-3.85 2.444-2.444 3.85-5.828 3.85-9.284 0-3.455-1.405-6.838-3.85-9.283-2.446-2.445-5.83-3.85-9.285-3.85zm96.294-41.205c-3.455 0-6.84 1.404-9.285 3.85-2.444 2.443-3.85 5.827-3.85 9.283 0 3.455 1.405 6.84 3.85 9.283 2.445 2.445 5.83 3.85 9.284 3.85 3.453 0 6.837-1.404 9.28-3.85 2.446-2.444 3.85-5.828 3.85-9.283 0-3.456-1.403-6.84-3.85-9.284-2.443-2.443-5.827-3.847-9.282-3.847zm43.277 93.252c-3.455 0-6.84 1.403-9.284 3.848-2.444 2.445-3.85 5.83-3.85 9.285s1.405 6.838 3.85 9.284c2.444 2.446 5.84 3.85 9.284 3.85 3.455 0 6.84-1.403 9.283-3.85 2.455-2.444 3.85-5.827 3.85-9.282s-1.405-6.84-3.85-9.285c-2.444-2.445-5.828-3.848-9.283-3.848z\"/>\r\n</svg>"
  2237.  
  2238. /***/ }),
  2239. /* 11 */
  2240. /***/ (function(module, exports) {
  2241.  
  2242. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\r\n <path d=\"M231.97 25.5c-82.09.7-162.87 37.735-213.314 103.625 26.08-22.208 57.052-38.305 90.063-47.5-62.24 53.704-94.583 139.09-79.626 225.28 1.09-28.258 7.8-55.66 19.28-80.655 1.154 51.488 18.492 102.143 52.22 143.344-38.003-76.004-22.756-193.02 39.844-240.313 11.657-5.955 24.047-10.833 37.093-14.436C284.597 85.27 394.467 151.13 423.157 261.5c16.562 63.723 2.315 128.343-33.25 177.313-4.68 4.68-9.852 8.942-15.47 12.875-5.947-1.8-11.324-4.187-16.03-7.22-12.01-7.737-19.51-19.947-20.656-33.624-2.096-24.99 14.13-53.014 46.53-80.53l-29.717-22.095c-16.038 39.73-38.954 61.946-64.188 65.186-13.836 1.777-27.648-2.677-39.03-11.844-8.41-6.77-15.634-16.017-21.5-27.406-16.69 19.306-20.72 43.155-16 67.28 5.483 28.04 23.502 55.683 47.28 72.252 21.973 15.312 49.595 21.202 74.813 16.375 9.043-1.732 17.75-4.832 25.843-9.344 18.055-8.925 34.396-20.126 47.25-35 65.17-57.975 96.26-151.12 72.47-242.658C453.52 95.415 358.743 24.782 255.47 25.875c-1.612.017-3.23.042-4.845.094-6.22-.368-12.44-.523-18.656-.47zm-90.657 145.125c-12.53-.06-18.07 15.934-6.063 23.656l188.688 133.032c4.29-6.45 8.42-14.145 12.25-23.187L150.968 173.53c-3.503-2.022-6.764-2.89-9.655-2.905z\"/>\r\n</svg>"
  2243.  
  2244. /***/ }),
  2245. /* 12 */
  2246. /***/ (function(module, exports) {
  2247.  
  2248. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\r\n <path d=\"M221.313 16a23.682 23.695 0 0 0-23.688 23.688v106.406a23.682 23.695 0 0 0 2.156 9.72 23.682 23.695 0 0 0 3.157 13.81l41.75 71.626-79 55.438 6.094-48.625a23.682 23.695 0 0 0-8.186-20.97l-66.28-81.937a23.682 23.695 0 0 0-33.314-3.5l-9.188 7.438a23.682 23.695 0 0 0-3.53 33.344l59.78 73.906-11.25 89.937a23.682 23.695 0 0 0 12.47 23.876l37.468 53.47a23.695 23.682 1.57 0 0 2.344 2.812 23.682 23.695 0 0 0 13.594 20.062L262 491.53a23.682 23.695 0 0 0 9.97 2.22 23.682 23.695 0 0 0 23.53-2.063l87.156-60.937a23.682 23.695 0 0 0 5.844-33l-6.78-9.688a23.682 23.695 0 0 0-32.97-5.875l-72.406 50.657-59.063-27.625 120.595-84.626a23.695 23.682 1.57 0 0 5.53-5.5 23.682 23.695 0 0 0 14.626-13.594l37.22-91.53 87.813-44.845a23.694 23.682 1.18 0 0 10.312-31.875L488 122.687a23.694 23.682 1.18 0 0-31.875-10.343l-94.688 48.375a23.694 23.682 1.18 0 0-9.843 9.436 23.682 23.695 0 0 0-8.344 10.47l-27.375 67.31-5.22-7.436a23.682 23.695 0 0 0-3-8.844l-50.81-87.094V39.688A23.682 23.695 0 0 0 233.154 16h-11.843zM77.75 376A59.994 60 0 0 0 16 436a59.994 60 0 1 0 120 0 59.994 60 0 0 0-58.25-60z\"/>\r\n</svg>"
  2249.  
  2250. /***/ }),
  2251. /* 13 */
  2252. /***/ (function(module, exports) {
  2253.  
  2254. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 265.2 459\">\r\n <path d=\"M265.2 423.3L71.4 229.5 214.2 86.7V204h51V0h-204v51h117.3L0 229.5 229.5 459\"/>\r\n</svg>"
  2255.  
  2256. /***/ }),
  2257. /* 14 */
  2258. /***/ (function(module, exports) {
  2259.  
  2260. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\r\n <path d=\"M495.664 318.553l-17.338-31.233-67.478 37.458-24.212-13.98 24.58-12.152-15.833-32.02-45.925 22.71-29.963-17.3c1.298-5.134 1.993-10.504 1.993-16.036s-.695-10.902-1.993-16.035l29.963-17.3 45.925 22.71 15.833-32.02-24.58-12.155 24.212-13.98 67.478 37.46 17.338-31.232-48.74-27.056 39.708-22.924-17.86-30.934-39.707 22.924.938-55.737-35.716-.6-1.298 77.168-24.213 13.98 1.765-27.363-35.647-2.3-3.297 51.127-30.004 17.323c-7.675-7.455-17.163-13.044-27.733-16.046v-34.612l42.63-28.42-19.815-29.723-22.814 15.21V87.507L340.04 47.8l-18.38-30.63-47.8 28.68V0h-35.72v45.85l-47.8-28.68-18.38 30.63 66.18 39.708v27.956l-22.814-15.21-19.814 29.722 42.628 28.42v34.61c-10.57 3.003-20.057 8.592-27.733 16.047l-30.004-17.323-3.297-51.126-35.647 2.3 1.764 27.36-24.212-13.978-1.298-77.167-35.716.6.938 55.736-39.707-22.923-17.86 30.934 39.706 22.924-48.74 27.058 17.34 31.23 67.477-37.457 24.212 13.98-24.58 12.154 15.833 32.02 45.925-22.71 29.963 17.3c-1.298 5.134-1.993 10.504-1.993 16.036s.695 10.902 1.993 16.035l-29.963 17.3-45.925-22.71-15.833 32.02 24.58 12.154-24.212 13.978-67.48-37.458-17.337 31.23 48.74 27.057-39.708 22.926 17.86 30.934 39.707-22.924-.938 55.737 35.716.6 1.298-77.167 24.213-13.98-1.765 27.363 35.647 2.3 3.297-51.127 30.004-17.324c7.675 7.455 17.163 13.044 27.733 16.046v34.61l-42.63 28.42 19.815 29.722 22.814-15.208v27.956L171.96 464.2l18.378 30.63 47.8-28.68V512h35.722v-45.85l47.8 28.68 18.38-30.63-66.18-39.708v-27.956l22.814 15.21 19.814-29.722-42.628-28.42v-34.61c10.57-3.003 20.057-8.592 27.733-16.047l30.004 17.323 3.297 51.126 35.647-2.3-1.764-27.36 24.212 13.978 1.298 77.167 35.716-.6-.938-55.736 39.707 22.924 17.86-30.934-39.706-22.924 48.74-27.057z\"/>\r\n</svg>"
  2261.  
  2262. /***/ }),
  2263. /* 15 */
  2264. /***/ (function(module, exports) {
  2265.  
  2266. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\r\n <path d=\"M164.188 40.375c-168.48 35.59-220.94 167.97-17 187.47-13.147 35.014-21.172 74.948-22.22 114.218-35.694 33.01-59.593 66.343-59.593 66.343l47.72 47.72-39.345 26.218h113.28c-73.368-73.383-21.278-104.5 65.626-104.5 88.096 0 134.175 35.905 65.594 104.5h114.5l-40.563-26.22 47.72-47.718s-22.25-31.027-55.844-62.844c-.65-40.39-8.807-81.663-22.344-117.718 203.953-19.496 151.482-151.878-17-187.47-40.813 30.863 6.55 79.75 43.717 44.626 36.908 54.048 8.752 99.845-71.937 65.594-.02-.022-.042-.04-.063-.063-9.66 28.054-33.333 48.47-61.968 48.47-28.637 0-52.332-20.416-62-48.47l-.064.064C111.736 184.826 83.596 139.042 120.5 85c37.168 35.125 84.5-13.763 43.688-44.625zm90.28 24.063c-25.736 0-48 25.088-48 57.937 0 32.85 22.264 57.938 48 57.938 25.738 0 47.97-25.086 47.97-57.938 0-32.852-22.232-57.938-47.97-57.938z\"/>\r\n</svg>"
  2267.  
  2268. /***/ }),
  2269. /* 16 */
  2270. /***/ (function(module, exports) {
  2271.  
  2272. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\r\n <path d=\"M169.53 16.344L259.345 88 337 92.28l-1.03 18.657-161.376-8.906-118.78-4.904 227.28 68.03-197.72 246.75-14.53-17.655-49.22 96.626 248.69-202.78 51.81 11.592-38.78 40.594L270.5 329.5l-57.28 84.125L444.843 273.47 328 241.06l100.22-81.718c1.132.46 2.3.898 3.5 1.22 23.324 6.248 49.764-16.835 59.06-51.533 9.298-34.696-2.08-67.875-25.405-74.125-23.325-6.25-49.765 16.802-59.063 51.5-1.467 5.476-2.403 10.918-2.875 16.22L169.53 16.343z\"/>\r\n</svg>"
  2273.  
  2274. /***/ }),
  2275. /* 17 */
  2276. /***/ (function(module, exports) {
  2277.  
  2278. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 209.841 209.841\">\r\n <path d=\"M209.572 57.2c2.77-26.837-16.525-41.194-27.115-45.036-2.348-.854-5.24-.063-6.402 2.15-1.134 2.16-.8 4.6 1.106 6.065.552.878 3.11 5.73 2.414 19.116-.13 2.48-.472 9.068-13.93 9.07-1.47 0-2.824-.09-3.93-.2-.957-2-2.527-4.618-4.926-8.26-3.986-6.054-10.233-9.253-18.067-9.253-4.53 0-9.62 1.157-13.967 3.175-4.647 2.158-15.527 3.447-19.834 3.81-4.308-.362-15.187-1.65-19.834-3.81-4.346-2.018-9.437-3.175-13.968-3.175-7.834 0-14.08 3.2-18.067 9.252-2.397 3.643-3.968 6.262-4.926 8.26-1.105.11-2.46.2-3.93.2-13.457 0-13.8-6.59-13.93-9.07C29.57 26.11 32.128 21.26 32.68 20.38c1.907-1.466 2.24-3.906 1.106-6.065-1.162-2.213-4.052-3.005-6.402-2.15C16.794 16.004-2.5 30.364.27 57.2 2.185 75.776 10.485 83.244 17.58 86.198c-5.747 5.5-11.913 12.858-12.09 19.237-.123 4.396 1.027 7.87 3.417 10.328 2.53 2.602 6.18 3.866 11.16 3.866 2.266 0 4.866-.256 7.95-.78 7.076-1.204 14.068-2.94 18.456-4.112 2.317 6.3 6.745 17.98 10.533 25.902 4.03 8.428 5.998 16.358 6.57 18.91-.758 4.618-2.663 20.932 6.328 29.922 7.06 7.06 20.983 8.542 31.42 8.542 1.763 0 3.045-.05 3.592-.075.548.025 1.83.075 3.59.075 10.44 0 24.364-1.482 31.423-8.542 8.99-8.99 7.086-25.303 6.328-29.92.574-2.56 2.542-10.486 6.572-18.912 3.788-7.922 8.216-19.602 10.533-25.902 4.388 1.173 11.38 2.907 18.456 4.11 3.085.526 5.686.782 7.95.782 4.98 0 8.632-1.265 11.162-3.866 2.39-2.457 3.54-5.932 3.418-10.33-.178-6.377-6.344-13.735-12.09-19.235 7.096-2.954 15.395-10.42 17.312-28.997zM59.048 101.576c0-4.13 1.86-7.97 5.106-10.54 1.89-1.5 4.578-1.433 6.396.153l12.5 10.927c1.816 1.588 2.24 4.245 1.01 6.318-2.417 4.065-6.847 6.59-11.562 6.59-7.416.002-13.45-6.033-13.45-13.45zm25.42 82.566c-.9.35-1.843.527-2.804.527-4.59 0-8.6-3.99-9.976-9.93-1.582-6.825.796-13.148 5.654-15.035.9-.35 1.845-.527 2.804-.527 4.59 0 8.6 3.99 9.976 9.93 1.582 6.824-.796 13.147-5.654 15.034zm53.83-9.402c-1.377 5.938-5.386 9.93-9.976 9.93-.96 0-1.904-.178-2.805-.528-4.857-1.886-7.235-8.21-5.653-15.034 1.377-5.938 5.386-9.93 9.976-9.93.96 0 1.902.178 2.803.527 4.86 1.887 7.237 8.21 5.655 15.035zm-.955-59.713c-4.715 0-9.145-2.525-11.56-6.59-1.232-2.074-.81-4.73 1.007-6.32l12.5-10.927c1.818-1.586 4.507-1.652 6.397-.154 3.245 2.57 5.106 6.412 5.106 10.54 0 7.416-6.034 13.45-13.45 13.45z\"/>\r\n</svg>"
  2279.  
  2280. /***/ }),
  2281. /* 18 */
  2282. /***/ (function(module, exports) {
  2283.  
  2284. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 69.406 69.407\">\r\n <path d=\"M32.95 34.21H3.84c-1.138 0-2.163-.686-2.597-1.74-.43-1.053-.178-2.25.63-3.054L26.1 5.604H3.84c-1.55 0-2.8-1.267-2.8-2.802C1.04 1.248 2.29 0 3.84 0h29.11c1.136 0 2.163.69 2.592 1.743.432 1.053.18 2.252-.627 3.053L10.687 28.61H32.95c1.545 0 2.802 1.26 2.802 2.802 0 1.55-1.262 2.8-2.803 2.8zm32.612 5.757H51.85l15.687-15.42c.812-.807 1.05-2 .63-3.053-.43-1.053-1.466-1.747-2.604-1.747H44.995c-1.538 0-2.802 1.255-2.802 2.8 0 1.536 1.264 2.803 2.802 2.803h13.72L43.028 40.766c-.818.81-1.058 1.998-.627 3.054.434 1.062 1.456 1.75 2.595 1.75H65.56c1.55 0 2.803-1.258 2.803-2.8 0-1.545-1.253-2.803-2.8-2.803zM33.935 63.804H24.37L35.9 52.477c.814-.8 1.06-2.01.63-3.063-.432-1.052-1.46-1.74-2.596-1.74h-16.41c-1.547 0-2.803 1.257-2.803 2.8s1.257 2.803 2.804 2.803h9.565L15.556 64.602c-.812.81-1.06 1.998-.627 3.054.43 1.056 1.456 1.75 2.595 1.75h16.41c1.548 0 2.802-1.258 2.802-2.8s-1.243-2.802-2.802-2.802z\"/>\r\n</svg>"
  2285.  
  2286. /***/ }),
  2287. /* 19 */
  2288. /***/ (function(module, exports) {
  2289.  
  2290. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 329.928 329.928\">\r\n <path d=\"M232.478 13.406c-24.56 0-48.827 9.248-67.51 25.28-18.69-16.033-42.957-25.28-67.517-25.28C42.807 13.406 0 56.212 0 110.856c0 66.056 45.99 106.43 115.604 167.544 5.95 5.224 12.09 10.614 18.41 16.202l.13.115 21.02 18.155c2.815 2.433 6.31 3.65 9.805 3.65s6.99-1.218 9.806-3.65l21.014-18.155.13-.114c41.606-36.796 72.8-64.966 95.37-92.44 26.36-32.088 38.638-61.1 38.638-91.305 0-54.646-42.805-97.452-97.45-97.452zM176.113 272.07l-11.146 9.63-11.143-9.626c-6.325-5.593-12.472-10.99-18.43-16.22C69.672 198.157 30 163.33 30 110.858c0-38.454 28.998-67.45 67.45-67.45 20.926 0 42.408 10.03 56.066 26.175 2.85 3.37 7.04 5.313 11.454 5.313 4.414 0 8.603-1.944 11.453-5.315 13.652-16.145 35.13-26.174 56.056-26.174 38.45 0 67.448 28.997 67.448 67.45 0 49.296-44.74 91.28-123.815 161.214z\"/>\r\n <path d=\"M184.964 94.964h-40v40h-40v40h40v40h40v-40h40v-40h-40\"/>\r\n</svg>"
  2291.  
  2292. /***/ }),
  2293. /* 20 */
  2294. /***/ (function(module, exports) {
  2295.  
  2296. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\r\n <path d=\"M494 20L304.887 143.357c16.494 14.608 32.743 22.57 44.963 36.97zM298.346 93.594c-12.58.436-26.59 4.984-38.047 11.77-7.64 4.523-14.115 9.97-18.304 15.142-4.19 5.173-5.79 9.832-5.648 12.668l.283 5.73-5.075 2.676C133.713 193.16 80.945 250.727 18 310.594V494h166.047c6.145-15.424 12.724-33.898 15.086-47.535 1.728-9.977-2.783-21.807-8.23-35.244-5.444-13.436-11.85-28.706-7.63-45.423 3.49-13.827 14.375-25.752 24.096-35.656 4.45-4.534 8.71-8.463 12.075-11.445-6.558-8.577-14.065-20.315-16.51-34.894l17.75-2.978c2.68 15.976 15.203 28.533 22.8 39.24l-.323.23c10.54 14.634 18.892 28.395 30.72 37.546 13.358 10.337 31.484 16.39 66.526 11.49l6.658-.932 2.782 6.124c6.96 15.322 14.372 23.89 21.015 28.423 6.643 4.535 12.63 5.46 18.692 4.79 12.125-1.34 24.29-10.974 27.76-14.264 4.13-3.92 9.657-9.476 13.32-16.124 3.347-6.076 5.073-12.687 3.48-20.744-42.68-37.562-69.592-108.75-90.256-152.6-9.245-19.62-35.786-34.492-52.967-47.95-2.427-1.4-2.675-2.582-3.24-5.154-4.215-19.167 3.188-40.257 10.974-57.298-.096.002-.186-.01-.28-.006zM59.352 136.55c17.863 4.925 37.775 9.665 57.406 14.815 14.803 3.883 29.26 7.935 42.406 12.766 17.914-12.178 37.407-24.123 59.072-35.77-51.62-13.3-109.928-3.148-158.884 8.19zm28.738 26.126c-23.002 4.133-45.974 10.254-67.147 16.662 18.133 3.813 38.298 7.314 58.207 11.242 11.774 2.323 23.337 4.766 34.256 7.643a686.475 686.475 0 0 1 27.403-21.15c-9.044-2.932-18.71-5.698-28.62-8.298-7.952-2.086-16.043-4.098-24.1-6.1zM47.44 202.94c-9.875 2.096-19.728 4.582-29.44 7.29v18.04a2251.165 2251.165 0 0 1 20.172 3.146c10.505 1.7 20.847 3.498 30.734 5.625 8.836-8.185 17.887-16.322 27.268-24.397-6.64-1.56-13.52-3.024-20.508-4.403-9.32-1.838-18.81-3.566-28.227-5.3zM304 224c8.837 0 16 7.163 16 16s-7.163 16-16 16-16-7.163-16-16 7.163-16 16-16zM18 246.512v26.58c4.16.195 8.28.425 12.342.71 7.44-7.2 14.878-14.384 22.387-21.538a604.747 604.747 0 0 0-17.433-3.078A1501.67 1501.67 0 0 0 18 246.512z\"/>\r\n</svg>"
  2297.  
  2298. /***/ }),
  2299. /* 21 */
  2300. /***/ (function(module, exports) {
  2301.  
  2302. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\r\n\t<path d=\"M18.465 20.182v192.9c38.45 80.782 55.772 134.822 150.726 221.098l.167.15.16.158c3.06 3.06 5.89 3.828 10.14 3.455 4.247-.373 9.65-2.494 14.738-5.912 9.313-6.256 16.457-17.503 17.67-22.266l-56.06-56.065 13.214-13.216 62.94 62.944c1.316 1.316 2.67 1.804 6.508 1.115 3.838-.69 9.267-3.1 14.61-6.78 10.098-6.954 19.75-18.663 22.835-26.454l-56.02-56.02 13.216-13.216 63.667 63.67c19.495-3.225 35.412-16.64 41.65-32.52l.756.296-71.514-71.516 13.214-13.215L447.81 415.52c7.58 7.58 14.7 9.95 21.032 9.853 6.33-.096 12.216-2.88 16.62-7.41 8.805-9.06 12.096-23.49-2.255-37.84L259.97 156.88l13.214-13.214 33.08 33.08c46.988-3.724 84.773-17.932 102.148-33.6 8.914-8.04 12.147-15.414 11.424-22.306-.644-6.142-5.172-13.675-15.865-21.79-52.33 22.22-109.035 19.23-162.685 2.538-54.338-16.908-105.852-47.735-148.47-81.406h-74.35z\"/>\r\n</svg>"
  2303.  
  2304. /***/ }),
  2305. /* 22 */
  2306. /***/ (function(module, exports) {
  2307.  
  2308. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\r\n <path d=\"M8 2.313c3.15 0 5.688 2.537 5.688 5.687 0 3.15-2.538 5.688-5.688 5.688S2.312 11.15 2.312 8 4.85 2.312 8 2.312zM8 1C4.15 1 1 4.15 1 8s3.15 7 7 7 7-3.15 7-7-3.15-7-7-7z\"/>\r\n <path d=\"M9.662 10.012c-.437.35-1.05.613-1.662.613-1.487 0-2.625-1.137-2.625-2.625 0-1.487 1.138-2.625 2.625-2.625.7 0 1.4.263 1.837.787L10.8 5.2c-.7-.7-1.75-1.138-2.8-1.138-2.188 0-3.938 1.75-3.938 3.938S5.813 11.938 8 11.938c.963 0 1.75-.35 2.45-.876z\"/>\r\n</svg>"
  2309.  
  2310. /***/ }),
  2311. /* 23 */
  2312. /***/ (function(module, exports) {
  2313.  
  2314. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 488.683 488.683\">\r\n <path d=\"M478.467 376.122l-58.143-58.19c-14.212-14.218-27.14-29.663-38.648-46.16L253.872 88.378c-2.153-3.087-5.68-4.93-9.45-4.93-3.765 0-7.292 1.842-9.444 4.93l-127.81 183.36c-11.518 16.513-24.463 31.982-38.706 46.216l-58.08 58.087c-8.526 8.53-12.058 20.86-9.32 32.6l15.92 68.343c1.22 5.213 5.857 8.9 11.204 8.9h173.7l42.553-220.375 42.54 220.377h173.665c5.35 0 9.985-3.688 11.205-8.9l15.92-68.272c2.74-11.743-.776-24.063-9.303-32.593zM60.264 120.473c18.454 0 34.895-8.325 45.94-21.39.812-.956.966-2.31.398-3.425-.568-1.116-1.756-1.78-3.023-1.684-1.363.11-2.753.165-4.147.165-33.28 0-60.264-26.983-60.264-60.263 0-9.56 2.28-18.57 6.25-26.587.554-1.124.398-2.468-.428-3.41-.822-.952-2.117-1.315-3.305-.936C17.505 10.78 0 33.426 0 60.21c0 33.28 26.982 60.263 60.264 60.263zM155.23 45.522c.398.38.588.936.493 1.472l-2.185 12.692c-.11.626.143 1.26.663 1.63.51.372 1.19.42 1.76.128l11.393-5.997c.492-.254 1.06-.254 1.553 0l11.393 5.997c.57.292 1.25.244 1.758-.127.52-.372.774-1.005.663-1.63l-2.183-12.693c-.096-.536.095-1.09.492-1.472l9.206-8.99c.445-.434.62-1.097.413-1.7-.192-.6-.712-1.044-1.348-1.13L176.58 31.85c-.552-.08-1.013-.42-1.25-.91l-5.713-11.544c-.27-.57-.854-.927-1.485-.927-.636 0-1.22.357-1.49.926l-5.71 11.545c-.24.49-.7.83-1.252.91l-12.723 1.85c-.636.088-1.156.53-1.347 1.133-.206.602-.03 1.265.413 1.7l9.207 8.99zM333.158 56.348c.392.38.567.934.488 1.472l-2.185 12.69c-.106.626.144 1.26.668 1.63.505.372 1.188.42 1.756.128l11.395-5.998c.488-.254 1.06-.254 1.55 0l11.395 5.998c.567.292 1.247.244 1.755-.127.52-.37.775-1.004.664-1.63l-2.186-12.69c-.075-.538.096-1.092.493-1.472l9.212-8.99c.44-.434.6-1.1.41-1.7-.188-.603-.712-1.046-1.344-1.133l-12.725-1.85c-.553-.08-1.014-.42-1.248-.91L347.54 30.22c-.267-.57-.854-.925-1.486-.925-.635 0-1.22.355-1.49.925l-5.71 11.545c-.24.49-.696.83-1.252.91l-12.723 1.85c-.633.087-1.156.53-1.348 1.132-.187.602-.03 1.267.413 1.702l9.213 8.988zM411.48 203.222c.392.38.583.936.487 1.472l-2.185 12.693c-.11.625.143 1.26.667 1.63.504.372 1.183.42 1.755.127l11.392-5.998c.493-.254 1.06-.254 1.554 0l11.393 5.998c.57.292 1.25.245 1.76-.127.52-.37.774-1.005.663-1.63l-2.185-12.693c-.095-.536.096-1.09.493-1.472l9.21-8.988c.442-.435.617-1.1.41-1.7-.19-.602-.71-1.045-1.346-1.132l-12.723-1.85c-.553-.08-1.014-.42-1.252-.91l-5.71-11.546c-.272-.57-.855-.927-1.487-.927-.635 0-1.22.356-1.49.926l-5.71 11.545c-.24.492-.696.83-1.252.91l-12.723 1.852c-.636.087-1.155.53-1.347 1.132-.206.602-.03 1.265.414 1.7l9.212 8.988z\"/>\r\n</svg>"
  2315.  
  2316. /***/ }),
  2317. /* 24 */
  2318. /***/ (function(module, exports) {
  2319.  
  2320. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 485.202 485.202\">\r\n <path d=\"M318.416 106.132c8.378 0 15.163 6.784 15.163 15.166 0 8.38-6.786 15.16-15.164 15.16H166.788c-8.384 0-15.166-6.78-15.166-15.16 0-8.382 6.782-15.166 15.166-15.166h151.628zm8.765 45.488H158.005C82.887 206.41 30.32 322.526 30.32 396.27c0 99.182 95.036 88.605 212.28 88.605 117.24 0 212.282 10.576 212.282-88.604 0-73.744-52.566-189.86-127.7-244.65zM158.005 90.97H327.18s67.05-58.49 36.722-84.076C333.58-18.693 266.294 35.324 242.6 33.43c-23.692 1.894-90.978-52.123-121.302-26.536C90.97 32.48 158.004 90.97 158.004 90.97z\"/>\r\n</svg>"
  2321.  
  2322. /***/ }),
  2323. /* 25 */
  2324. /***/ (function(module, exports) {
  2325.  
  2326. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 226.5 226.501\">\r\n <path d=\"M78.892 91.198h-3.888v17.826h2.965c2.64 0 5.085-.706 5.085-5.824v-6.363c0-5.203-2.057-5.64-4.163-5.64zM155.518 91.198h-3.795v19.854h3.795c2.098 0 3.98-.39 3.98-5.086v-9.682c0-4.697-1.884-5.086-3.98-5.086z\"/>\r\n <path d=\"M202 181.67h-8.902c.147-1.294.23-2.605.23-3.938V54.242c0-13.33-7.607-24.876-18.715-30.556C169.006 9.8 155.41 0 139.518 0H86.984C71.09 0 57.494 9.8 51.887 23.686 40.78 29.366 33.172 40.91 33.172 54.243v123.49c0 1.33.084 2.643.23 3.936H24.5c-5.522 0-10 4.477-10 10v24.83c0 5.523 4.478 10 10 10H202c5.523 0 10-4.477 10-10v-24.83c0-5.524-4.476-10-10-10zM94.528 145.16c-.76.867-1.856 1.363-3.01 1.363h-4.14c-1.977 0-3.656-1.44-3.955-3.396-.194-1.272-.277-2.927-.277-5.534v-10.145c0-6.648-2.786-7.205-5.64-7.205h-2.504v22.28c0 2.208-1.79 4-4 4H66.86c-2.21 0-4-1.792-4-4V83.977c0-2.21 1.79-4 4-4h12.307c10.937 0 16.03 5.035 16.03 15.846v5.072c0 6.264-1.815 10.556-5.538 13.054 3.83 2.397 5.63 6.835 5.63 13.778v9.96c0 1.75.032 3.08.195 4.31.153 1.145-.197 2.296-.957 3.162zm28.61-2.637c0 2.21-1.79 4-4 4h-4.143c-2.21 0-4-1.79-4-4V83.978c0-2.21 1.79-4 4-4h4.144c2.208 0 4 1.79 4 4v58.545zm48.503-37.202c0 14.012-8.768 16.952-16.122 16.952h-3.795v20.252c0 2.21-1.79 4-4 4h-4.143c-2.21 0-4-1.79-4-4V83.978c0-2.21 1.79-4 4-4h11.938c7.354 0 16.123 2.94 16.123 16.953v8.39z\"/>\r\n</svg>"
  2327.  
  2328. /***/ }),
  2329. /* 26 */
  2330. /***/ (function(module, exports) {
  2331.  
  2332. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 105.144 105.144\">\r\n <path d=\"M98.126 30.812c-9.885-11.406-33.412-10.61-35.012-1.417-1.328 7.66 6.71 11.943 10.554 15.915 4.445 4.592 5.2 12.01 1.535 17.07-1.528 2.102-10.65 11.332-7.938 20.447 1.378 4.624 4.48 6.696 8.54 7.537 13.495 2.81 14.92-7.9 15.06-12.65.124-4.46.79-8.794 2.626-12.878 4.507-10.246 11.34-26.286 4.636-34.024zM63.99.045c3.054-.49 6.167 3.114 6.958 8.045.79 4.932-1.034 9.33-4.083 9.82-3.053.49-6.163-3.114-6.957-8.045-.788-4.932 1.037-9.33 4.083-9.82zM81.83 9.37c.186 3.455-1.39 6.346-3.522 6.464-2.137.115-4.015-2.59-4.205-6.045s1.393-6.346 3.523-6.464c2.133-.114 4.015 2.592 4.205 6.045zm8.96 2.492c.155 2.802-1.126 5.154-2.862 5.247-1.736.092-3.257-2.102-3.41-4.908-.155-2.806 1.123-5.154 2.86-5.25 1.735-.097 3.263 2.104 3.413 4.91zm5.527 4.144c-.147 2.072-1.306 3.68-2.588 3.586-1.28-.09-2.2-1.843-2.054-3.915s1.303-3.68 2.588-3.586c1.278.09 2.202 1.844 2.055 3.916zm3.915 4.89c-.115 1.652-1.04 2.934-2.065 2.862-1.02-.075-1.757-1.474-1.643-3.128.118-1.653 1.045-2.935 2.07-2.863 1.023.075 1.756 1.478 1.638 3.128zM42.027 43.71c-1.6-9.194-25.127-9.985-35.008 1.417-6.704 7.737.12 23.78 4.634 34.024 1.836 4.088 2.498 8.415 2.627 12.874.14 4.753 1.57 15.46 15.06 12.658 4.06-.845 7.162-2.913 8.537-7.54 2.713-9.116-6.406-18.346-7.934-20.447-3.668-5.06-2.913-12.476 1.532-17.07 3.842-3.972 11.88-8.256 10.552-15.915zM34.186 22.41c.795-4.933 3.908-8.537 6.954-8.046 3.046.49 4.874 4.885 4.083 9.82-.795 4.932-3.908 8.536-6.954 8.045-3.05-.49-4.875-4.886-4.084-9.82zm-3.14 1.692c-.185 3.454-2.07 6.16-4.204 6.04-2.137-.114-3.715-3.01-3.525-6.462.19-3.454 2.072-6.16 4.205-6.04 2.133.116 3.715 3.012 3.525 6.462zm-10.42 2.42c-.154 2.805-1.678 5-3.41 4.906-1.73-.093-3.01-2.444-2.857-5.247.15-2.805 1.677-5.002 3.41-4.91 1.73.097 3.006 2.45 2.856 5.25zm-7.158 3.47c.147 2.072-.773 3.826-2.05 3.915s-2.438-1.517-2.585-3.59.773-3.826 2.05-3.915c1.282-.09 2.438 1.518 2.585 3.59zm-4.86 4.96c.118 1.654-.616 3.057-1.64 3.13-1.02.07-1.942-1.21-2.06-2.864-.118-1.653.616-3.056 1.636-3.128 1.023-.075 1.946 1.206 2.064 2.863z\"/>\r\n</svg>"
  2333.  
  2334. /***/ }),
  2335. /* 27 */
  2336. /***/ (function(module, exports) {
  2337.  
  2338. module.exports = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\r\n <path d=\"M437.034 437.002C483.352 390.676 512 326.682 512 256c0-70.6-28.583-134.526-74.806-180.84-.06-.06-.11-.126-.17-.187-.06-.06-.126-.11-.187-.17C390.523 28.583 326.6 0 256 0S121.477 28.582 75.164 74.804c-.06.06-.128.11-.188.17-.06.06-.11.127-.17.188C28.584 121.474 0 185.4 0 256c0 70.683 28.648 134.676 74.966 181.002l.014.015c.005.005.01.01.015.013C121.32 483.35 185.315 512 256 512s134.68-28.65 181.005-74.97l.015-.012.014-.016zM43.726 277.332H151.47c2.765 13.618 8.127 26.29 15.542 37.484l-76.188 76.188c-25.865-31.606-42.838-70.767-47.098-113.67zm47.1-156.34l76.187 76.19c-7.415 11.195-12.78 23.867-15.544 37.485H43.725c4.26-42.905 21.234-82.067 47.1-113.674zm377.448 113.675H360.53c-2.764-13.618-8.127-26.29-15.543-37.486l76.188-76.186c25.865 31.606 42.84 70.768 47.1 113.673zm-167.024 66.58c-.022.023-.04.047-.062.07C289.61 312.86 273.638 320 256 320s-33.61-7.14-45.188-18.684c-.022-.022-.04-.046-.062-.068-.022-.022-.046-.04-.067-.06C199.14 289.61 192 273.637 192 256c0-35.343 28.657-64 64-64s64 28.657 64 64c0 17.638-7.14 33.61-18.683 45.187-.02.022-.045.04-.067.06zm13.567-134.236c-11.195-7.413-23.867-12.776-37.483-15.54V43.725c42.904 4.26 82.065 21.234 113.67 47.098l-76.187 76.187zm-80.15-15.54c-13.617 2.764-26.288 8.126-37.483 15.54l-76.188-76.187c31.606-25.864 70.767-42.838 113.67-47.098V151.47zM197.18 344.986c11.197 7.415 23.87 12.78 37.487 15.544v107.745c-42.905-4.26-82.067-21.235-113.674-47.1l76.188-76.188zm80.153 15.544c13.618-2.764 26.29-8.127 37.486-15.543l76.187 76.188c-31.607 25.865-70.77 42.84-113.674 47.1V360.53zm67.656-45.713c7.413-11.195 12.776-23.867 15.54-37.483h107.745c-4.26 42.904-21.234 82.065-47.098 113.67l-76.188-76.187z\"/>\r\n</svg>"
  2339.  
  2340. /***/ }),
  2341. /* 28 */
  2342. /***/ (function(module, exports, __webpack_require__) {
  2343.  
  2344. // style-loader: Adds some css to the DOM by adding a <style> tag
  2345.  
  2346. // load the styles
  2347. var content = __webpack_require__(29);
  2348. if(typeof content === 'string') content = [[module.i, content, '']];
  2349. // Prepare cssTransformation
  2350. var transform;
  2351.  
  2352. var options = {}
  2353. options.transform = transform
  2354. // add the styles to the DOM
  2355. var update = __webpack_require__(32)(content, options);
  2356. if(content.locals) module.exports = content.locals;
  2357. // Hot Module Replacement
  2358. if(false) {
  2359. // When the styles change, update the <style> tags
  2360. if(!content.locals) {
  2361. module.hot.accept("!!../node_modules/css-loader/index.js??ref--2-1!../node_modules/postcss-loader/lib/index.js!./ext.css", function() {
  2362. var newContent = require("!!../node_modules/css-loader/index.js??ref--2-1!../node_modules/postcss-loader/lib/index.js!./ext.css");
  2363. if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
  2364. update(newContent);
  2365. });
  2366. }
  2367. // When the module is disposed, remove the <style> tags
  2368. module.hot.dispose(function() { update(); });
  2369. }
  2370.  
  2371. /***/ }),
  2372. /* 29 */
  2373. /***/ (function(module, exports, __webpack_require__) {
  2374.  
  2375. exports = module.exports = __webpack_require__(30)(undefined);
  2376. // imports
  2377.  
  2378.  
  2379. // module
  2380. exports.push([module.i, "html.ext-html {\r\n\theight: 100%;\r\n}\r\n\r\n\thtml.ext-html body {\r\n\t\tbox-sizing: border-box;\r\n\t}\r\n\r\n\thtml.ext-html body footer {\r\n\t\t\tmargin-top: 0;\r\n\t\t\tdisplay: none;\r\n\t\t}\r\n\r\n\thtml.ext-html body #main-container {\r\n\t\t\theight: 100%;\r\n\t\t\tbox-sizing: border-box;\r\n\t\t}\r\n\r\n\thtml.ext-html body #main-container #content {\r\n\t\t\t\tpadding: 0;\r\n\t\t\t\theight: 100%;\r\n\t\t\t}\r\n\r\n\thtml.ext-html .pgf-game-data {\r\n\t\theight: 100%;\r\n\t\tmin-height: 740px;\r\n\t}\r\n\r\n\thtml.ext-html .pgf-hero-column,\r\n\thtml.ext-html .pgf-info-column {\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\theight: 100%;\r\n\t}\r\n\r\n\thtml.ext-html .pgf-hero-column .first-row-block, html.ext-html .pgf-info-column .first-row-block {\r\n\t\t\tmin-height: 240px;\r\n\t\t\tflex: 0 0 auto;\r\n\t\t}\r\n\r\n\thtml.ext-html .pgf-hero-column.pgf-info-column .second-row-block, html.ext-html .pgf-info-column.pgf-info-column .second-row-block {\r\n\t\t\tflex: 1 1 auto;\r\n\t\t\tdisplay: flex;\r\n\t\t\tflex-direction: column;\r\n\t\t\tmargin-bottom: 25px;\r\n\t\t}\r\n\r\n\thtml.ext-html .pgf-hero-column.pgf-info-column .second-row-block .tab-content, html.ext-html .pgf-info-column.pgf-info-column .second-row-block .tab-content {\r\n\t\t\t\tflex: 1 1 auto;\r\n\r\n\t\t\t\tmargin-right: -5px;\r\n\t\t\t\tpadding-right: 5px;\r\n\t\t\t\toverflow-y: scroll;\r\n\t\t\t}\r\n\r\n\thtml.ext-html .pgf-hero-column.pgf-info-column .second-row-block .tab-content::-webkit-scrollbar, html.ext-html .pgf-info-column.pgf-info-column .second-row-block .tab-content::-webkit-scrollbar {\r\n\t\t\t\t\twidth: 5px;\r\n\t\t\t\t}\r\n\r\n\thtml.ext-html .pgf-hero-column.pgf-info-column .second-row-block .tab-content::-webkit-scrollbar-track, html.ext-html .pgf-info-column.pgf-info-column .second-row-block .tab-content::-webkit-scrollbar-track {\r\n\t\t\t\t\tbackground-color: rgba(0, 0, 0, .05);\r\n\t\t\t\t}\r\n\r\n\thtml.ext-html .pgf-hero-column.pgf-info-column .second-row-block .tab-content::-webkit-scrollbar-thumb, html.ext-html .pgf-info-column.pgf-info-column .second-row-block .tab-content::-webkit-scrollbar-thumb {\r\n\t\t\t\t\tbackground-color: rgba(0, 0, 0, .2);\r\n\t\t\t\t\tborder-radius: 2px;\r\n\t\t\t\t}\r\n\r\n\thtml.ext-html .pgf-hero-column.pgf-info-column .second-row-block .tab-content::-webkit-scrollbar-thumb:hover, html.ext-html .pgf-info-column.pgf-info-column .second-row-block .tab-content::-webkit-scrollbar-thumb:hover {\r\n\t\t\t\t\t\tbackground-color: rgba(0, 0, 0, .3);\r\n\t\t\t\t\t}\r\n\r\n\thtml.ext-html .pgf-hero-column.pgf-info-column .second-row-block .tab-content .log-block, html.ext-html .pgf-info-column.pgf-info-column .second-row-block .tab-content .log-block {\r\n\t\t\t\t\toverflow: visible;\r\n\t\t\t\t\theight: auto;\r\n\t\t\t\t}\r\n\r\n.link-ajax {\r\n\tcolor: #0088cc;\r\n\tcursor: default;\r\n\tbackground-image: linear-gradient(to right, #0088cc, #0088cc 50%, transparent 50%);\r\n\tbackground-size: 2px 1px;\r\n\tbackground-position: 0 95%;\r\n\tbackground-repeat: repeat-x;\r\n}\r\n.link-ajax:hover {\r\n\tcolor: #005580;\r\n\tbackground-image: linear-gradient(to right, #005580, #005580 50%, transparent 50%);\r\n}\r\n\r\nbody .nav-tabs > li > a {\r\n\tpadding-left: 9px;\r\n\tpadding-right: 9px;\r\n}\r\n\r\n.pgf-ext-tab-button {\r\n\tbackground: url(" + __webpack_require__(31) + ") center center no-repeat;\r\n\tbackground-size: 16px 16px;\r\n\tcolor: transparent !important;\r\n\ttext-indent: -500px;\r\n\toverflow: hidden;\r\n}\r\n\r\n.ext-container .ext-tabs {\r\n\t\tmargin-bottom: 10px;\r\n\t\ttext-align: right;\r\n\t}\r\n\r\n.ext-container .ext-tabs .ext-tab {\r\n\t\t\ttext-decoration: dotted;\r\n\t\t\tcolor: #0088cc;\r\n\t\t\tbackground-image: linear-gradient(to right, #0088cc, #0088cc 50%, transparent 50%);\r\n\t\t\tbackground-size: 2px 1px;\r\n\t\t\tbackground-position: 0 95%;\r\n\t\t\tbackground-repeat: repeat-x;\r\n\t\t\tcursor: pointer;\r\n\t\t\tmargin-left: 10px;\r\n\r\n\t\t}\r\n\r\n.ext-container .ext-tabs .ext-tab.active {\r\n\t\t\t\tbackground-image: none;\r\n\t\t\t\tcolor: #333;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t}\r\n\r\n.ext-container .ext-content {\r\n\t\tdisplay: none;\r\n\t}\r\n\r\n.ext-container .ext-content.active {\r\n\t\t\tdisplay: block;\r\n\t\t}\r\n\r\n\r\n#abilities-block .angel-ability { width: auto !important; display: inline-block; }\r\n#abilities-block .angel-ability.pgf-ability-help { margin: 0 50px; }\r\n#abilities-block .dropdown { width: auto !important; }\r\n\r\n\r\n\r\n.ext-controls { font-size: 12px; }\r\n.ext-control { margin-right: 10px; }\r\n.ext-control.link-ajax { background: none; }\r\n\r\n\r\n.table-stats {\r\n\twidth: 100%;\r\n}\r\n\r\n\r\n.table-stats thead td {\r\n\t\t\ttext-align: right;\r\n\t\t\tfont-weight: bold;\r\n\t\t\tborder-bottom: 2px solid #ddd;\r\n\t\t}\r\n\r\n\r\n.table-stats tbody th,\r\n\t\t.table-stats tbody td {\r\n\t\t\tvertical-align: top;\r\n\t\t\tborder-top: 1px solid #ddd;\r\n\t\t\tpadding: 5px;\r\n\t\t\twhite-space: nowrap;\r\n\t\t}\r\n\r\n\r\n.table-stats tbody tr:hover {\r\n\t\t\tbackground-color: #e1e6e6;\r\n\t\t}\r\n\r\n\r\n.table-stats tbody th {\r\n\t\t\ttext-align: left;\r\n\t\t}\r\n\r\n\r\n.table-stats tbody td {\r\n\t\t\ttext-align: right;\r\n\t\t}\r\n\r\n\r\n/* short */\r\n.log-record.ext:hover {\r\n\tbackground: none;\r\n}\r\n\r\n.act {\r\n\twhite-space: nowrap;\r\n\tpadding: 1px 5px;\r\n\tmargin: -1px 0;\r\n\tdisplay: inline-block;\r\n}\r\n\r\n.act:hover {\r\n\t\tbackground: #e1e6e6;\r\n\t}\r\n\r\n.act svg {\r\n\t\theight: 13px;\r\n\t\t/*width: 13px;*/\r\n\t\tvertical-align: -1px;\r\n\t\tdisplay: inline-block;\r\n\t}\r\n\r\n.act.positive { color: black; }\r\n\r\n.act.positive svg { fill: #005000; }\r\n\r\n.act.negative { color: #B90000; }\r\n\r\n.act.negative svg { fill: darkred; }\r\n\r\n.act.god{ color: #007b7b; text-decoration: underline; }\r\n\r\n.act.god svg { fill: #007b7b; }\r\n\r\n.act .companion svg {\r\n\t\tfill: #002000;\r\n\t}\r\n\r\n.act .god-icon svg {\r\n\t\tfill: #004F4F;\r\n\t}\r\n\r\n.act.loot { color: darkgoldenrod; }\r\n\r\n.act.loot svg { fill: darkgoldenrod; }\r\n\r\n.act.loot.drop .artifact{ text-decoration: line-through; }\r\n\r\n\r\n\r\n\r\n.act-rest.positive { color: #005000; }\r\n.act-heal.positive { color: #005000; }\r\n.act-heal.negative { color: darkred; }\r\n.act-godheal.act { color: darkmagenta; text-decoration: underline; }\r\n\r\n.act.positive .vamp { color: #005000; }\r\n.act.negative .vamp { color: darkred; }\r\n\r\n.act-slow.positive { color: #00008B; }\r\n\r\n.act-coins.positive { color: darkgoldenrod; }\r\n.act-coins.negative { color: darkgoldenrod; text-decoration: line-through; }\r\n.act-godcoins.act { color: darkmagenta; text-decoration: underline; }\r\n\r\n.act-pvpeff.positive { color: dodgerblue; }\r\n.act-pvpeff.negative { color: dodgerblue; text-decoration: line-through; }\r\n.act-pvpice.positive,\r\n.act-pvpflame.negative,\r\n.act-pvpfail.negative { color: darkgreen; }\r\n.act-pvpice.negative,\r\n.act-pvpflame.positive,\r\n.act-pvpfail.positive { color: darkred; }\r\n/* eo short */\r\n\r\n/* highlight */\r\n.positive .value { color: darkred; }\r\n.negative .value { color: red; }\r\n\r\n.msg-dmg.positive .value { color: darkred; }\r\n.msg-dmg.negative .value { color: red; }\r\n\r\n.msg-godhit { color: darkmagenta; }\r\n.msg-pickup .item { color: darkgoldenrod; }\r\n.msg-empty { color: darkgoldenrod; text-decoration: line-through; }\r\n.msg-drop { color: darkgoldenrod; text-decoration: line-through; }\r\n.msg-death { color: darkred; text-decoration: line-through; }\r\n\r\n.submessage .energy { color: dodgerblue; }\r\n.submessage .coins { color: darkgoldenrod; }\r\n.submessage .coins svg { fill: darkgoldenrod; }\r\n.submessage .godcoins { color: darkmagenta; }\r\n\r\n.submessage .level,\r\n.submessage .exp { color: darkviolet; text-decoration: underline; }\r\n/* eo highlight */\r\n\r\n\r\n/* group */\r\n.archive-content .level { color: darkviolet; text-decoration: underline; }\r\n.group { position: relative; margin-bottom: 2px; }\r\n.group .group-toggle { cursor: default; }\r\n.group .on-open { display: none; }\r\n.group.open .on-open { display: block; }\r\n.group.open .on-close { display: none; }\r\n\r\n.group.open { margin: 0; }\r\n\r\n.group-time { }\r\n.group-time.average { color: #8a6d3b; text-decoration: underline; }\r\n.group-time.bad { color: #a94442; text-decoration: underline; }\r\n\r\n.group-title {\r\n\tcursor: default;\r\n\tmargin-right: 0;\r\n\twhite-space: nowrap;\r\n\toverflow: hidden;\r\n\ttext-overflow: ellipsis;\r\n}\r\n.group-title:hover { background: #ddd; }\r\n\r\n.action-icon.fight { color: darkred; }\r\n.action-icon.fight-god { color: darkviolet; }\r\n\r\n.action-icon.equip,\r\n.action-icon.trade { color: darkgoldenrod; }\r\n.action-icon.quest,\r\n.action-icon.noeffect { color: dodgerblue; }\r\n.action-icon.idle { color: dodgerblue; }\r\n.action-icon.energy { color: dodgerblue; }\r\n.action-icon.rest { color: #005000; }\r\n.action-icon.dead { color: darkred; }\r\n.action-icon.companionHeal { color: #008000; }\r\n.action-icon.broken { color: red; }\r\n\r\n.action-icon {\r\n\tdisplay: inline-block;\r\n\tvertical-align: text-bottom;\r\n\twidth: 15px;\r\n}\r\n.group-title.god .group-time { color: darkviolet; text-decoration: underline; }\r\n.group-time { margin-right: 3px; }\r\n\r\n.group-controls { position: absolute; right: 0; top: 1px; }\r\n.group-stats { margin-bottom: 2px; }\r\n.group-stats .stat { margin: 0 0 0 4px;}\r\n.group-stats .stat-me + .stat-enemy { margin-left: 8px;}\r\n\r\n.group-stats .stat-me { color: #005000; }\r\n.group-stats .stat-enemy { color: darkred; }\r\n\r\n.group-stats .stat-against {\r\n\tdisplay: inline-block;\r\n\twidth: 35px;\r\n\twhite-space: nowrap;\r\n}\r\n/*.group .pgf-log-list { margin: 0; }*/\r\n/* eo group */\r\n\r\n\r\n.text-muted { color: #999; }\r\n.text-primary { color: #428bca; }\r\n.text-success { color: #3c763d; }\r\n.text-info { color: #31708f; }\r\n.text-warning { color: #8a6d3b; }\r\n.text-danger { color: #a94442; }\r\n\r\n\r\n.quest-icon-mini {\r\n\tfloat: none;\r\n\tdisplay: inline-block;\r\n\tmargin: 0;\r\n\tvertical-align: bottom;\r\n\twidth: 16px;\r\n\theight: 16px;\r\n\tbackground-size: 32px 192px;\r\n\tbackground-image: url('http://static.the-tale.org/static/168/game/images/quests.png');\r\n}\r\n.quest-icon-mini.caravan { background-position: 0 0; }\r\n.quest-icon-mini.delivery { background-position: 0 -16px; }\r\n.quest-icon-mini.help { background-position: 0 -32px; }\r\n.quest-icon-mini.help_friend { background-position: 0 -48px; }\r\n.quest-icon-mini.hometown { background-position: 0 -64px; }\r\n.quest-icon-mini.hunt { background-position: 0 -80px; }\r\n.quest-icon-mini.interfere_enemy { background-position: 0 -96px; }\r\n.quest-icon-mini.collect_debt { background-position: 0 -112px; }\r\n.quest-icon-mini.spying { background-position: 0 -128px; }\r\n.quest-icon-mini.search_smith { background-position: 0 -144px; }\r\n.quest-icon-mini.no-quest { background-position: 0 -160px; }\r\n.quest-icon-mini.next-spending { background-position: 0 -176px; }\r\n.quest-icon-mini.pilgrimage { background-position: -16px -80px; }\r\n\r\n\r\n\r\n/*#pgf-towns-container { background: #fff; }*/\r\n#pgf-towns-container .reload {\r\n\tfont-size: 12px;\r\n}\r\n\r\n\r\n\r\n/* settings */\r\n#log-block-sets { height: auto; }\r\n.sets-header { margin: 10px 0 5px;}\r\n.sets { margin: 5px 0 0 20px; }\r\n.sets-inline { display: inline-block; }\r\n\r\n.note-block { color: #999; }\r\ninput.input-tiny { height: 11px; width: 60px; font-size: 12px; margin: -2px 0 -3px; vertical-align: 0; }\r\ninput.input-tiny-num { width: 45px; }\r\n.input-append .add-on { height: 11px; line-height: 11px; margin-top: -2px; margin-bottom: -3px; vertical-align: -1px; }\r\n\r\n\r\n.sets label {\r\n\tdisplay: inline;\r\n\tfont-weight: normal;\r\n\tmargin-bottom: 0;\r\n}\r\n.sets .input-wrap-inline {\r\n\tdisplay: inline-block;\r\n}\r\n.sets .input-wrap {\r\n\ttransition: opacity .2s;\r\n}\r\n.sets .input-wrap.disabled { opacity: .7; }\r\n/* eo sets */\r\n\r\n\r\ndiv.easy-block {\r\n\tclear: right;\r\n}\r\n", ""]);
  2381.  
  2382. // exports
  2383.  
  2384.  
  2385. /***/ }),
  2386. /* 30 */
  2387. /***/ (function(module, exports) {
  2388.  
  2389. /*
  2390. MIT License http://www.opensource.org/licenses/mit-license.php
  2391. Author Tobias Koppers @sokra
  2392. */
  2393. // css base code, injected by the css-loader
  2394. module.exports = function(useSourceMap) {
  2395. var list = [];
  2396.  
  2397. // return the list of modules as css string
  2398. list.toString = function toString() {
  2399. return this.map(function (item) {
  2400. var content = cssWithMappingToString(item, useSourceMap);
  2401. if(item[2]) {
  2402. return "@media " + item[2] + "{" + content + "}";
  2403. } else {
  2404. return content;
  2405. }
  2406. }).join("");
  2407. };
  2408.  
  2409. // import a list of modules into the list
  2410. list.i = function(modules, mediaQuery) {
  2411. if(typeof modules === "string")
  2412. modules = [[null, modules, ""]];
  2413. var alreadyImportedModules = {};
  2414. for(var i = 0; i < this.length; i++) {
  2415. var id = this[i][0];
  2416. if(typeof id === "number")
  2417. alreadyImportedModules[id] = true;
  2418. }
  2419. for(i = 0; i < modules.length; i++) {
  2420. var item = modules[i];
  2421. // skip already imported module
  2422. // this implementation is not 100% perfect for weird media query combinations
  2423. // when a module is imported multiple times with different media queries.
  2424. // I hope this will never occur (Hey this way we have smaller bundles)
  2425. if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) {
  2426. if(mediaQuery && !item[2]) {
  2427. item[2] = mediaQuery;
  2428. } else if(mediaQuery) {
  2429. item[2] = "(" + item[2] + ") and (" + mediaQuery + ")";
  2430. }
  2431. list.push(item);
  2432. }
  2433. }
  2434. };
  2435. return list;
  2436. };
  2437.  
  2438. function cssWithMappingToString(item, useSourceMap) {
  2439. var content = item[1] || '';
  2440. var cssMapping = item[3];
  2441. if (!cssMapping) {
  2442. return content;
  2443. }
  2444.  
  2445. if (useSourceMap && typeof btoa === 'function') {
  2446. var sourceMapping = toComment(cssMapping);
  2447. var sourceURLs = cssMapping.sources.map(function (source) {
  2448. return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'
  2449. });
  2450.  
  2451. return [content].concat(sourceURLs).concat([sourceMapping]).join('\n');
  2452. }
  2453.  
  2454. return [content].join('\n');
  2455. }
  2456.  
  2457. // Adapted from convert-source-map (MIT)
  2458. function toComment(sourceMap) {
  2459. // eslint-disable-next-line no-undef
  2460. var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
  2461. var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;
  2462.  
  2463. return '/*# ' + data + ' */';
  2464. }
  2465.  
  2466.  
  2467. /***/ }),
  2468. /* 31 */
  2469. /***/ (function(module, exports) {
  2470.  
  2471. module.exports = "data:image/png;base64,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"
  2472.  
  2473. /***/ }),
  2474. /* 32 */
  2475. /***/ (function(module, exports, __webpack_require__) {
  2476.  
  2477. /*
  2478. MIT License http://www.opensource.org/licenses/mit-license.php
  2479. Author Tobias Koppers @sokra
  2480. */
  2481.  
  2482. var stylesInDom = {};
  2483.  
  2484. var memoize = function (fn) {
  2485. var memo;
  2486.  
  2487. return function () {
  2488. if (typeof memo === "undefined") memo = fn.apply(this, arguments);
  2489. return memo;
  2490. };
  2491. };
  2492.  
  2493. var isOldIE = memoize(function () {
  2494. // Test for IE <= 9 as proposed by Browserhacks
  2495. // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805
  2496. // Tests for existence of standard globals is to allow style-loader
  2497. // to operate correctly into non-standard environments
  2498. // @see https://github.com/webpack-contrib/style-loader/issues/177
  2499. return window && document && document.all && !window.atob;
  2500. });
  2501.  
  2502. var getElement = (function (fn) {
  2503. var memo = {};
  2504.  
  2505. return function(selector) {
  2506. if (typeof memo[selector] === "undefined") {
  2507. memo[selector] = fn.call(this, selector);
  2508. }
  2509.  
  2510. return memo[selector]
  2511. };
  2512. })(function (target) {
  2513. return document.querySelector(target)
  2514. });
  2515.  
  2516. var singleton = null;
  2517. var singletonCounter = 0;
  2518. var stylesInsertedAtTop = [];
  2519.  
  2520. var fixUrls = __webpack_require__(33);
  2521.  
  2522. module.exports = function(list, options) {
  2523. if (typeof DEBUG !== "undefined" && DEBUG) {
  2524. if (typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment");
  2525. }
  2526.  
  2527. options = options || {};
  2528.  
  2529. options.attrs = typeof options.attrs === "object" ? options.attrs : {};
  2530.  
  2531. // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
  2532. // tags it will allow on a page
  2533. if (!options.singleton) options.singleton = isOldIE();
  2534.  
  2535. // By default, add <style> tags to the <head> element
  2536. if (!options.insertInto) options.insertInto = "head";
  2537.  
  2538. // By default, add <style> tags to the bottom of the target
  2539. if (!options.insertAt) options.insertAt = "bottom";
  2540.  
  2541. var styles = listToStyles(list, options);
  2542.  
  2543. addStylesToDom(styles, options);
  2544.  
  2545. return function update (newList) {
  2546. var mayRemove = [];
  2547.  
  2548. for (var i = 0; i < styles.length; i++) {
  2549. var item = styles[i];
  2550. var domStyle = stylesInDom[item.id];
  2551.  
  2552. domStyle.refs--;
  2553. mayRemove.push(domStyle);
  2554. }
  2555.  
  2556. if(newList) {
  2557. var newStyles = listToStyles(newList, options);
  2558. addStylesToDom(newStyles, options);
  2559. }
  2560.  
  2561. for (var i = 0; i < mayRemove.length; i++) {
  2562. var domStyle = mayRemove[i];
  2563.  
  2564. if(domStyle.refs === 0) {
  2565. for (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();
  2566.  
  2567. delete stylesInDom[domStyle.id];
  2568. }
  2569. }
  2570. };
  2571. };
  2572.  
  2573. function addStylesToDom (styles, options) {
  2574. for (var i = 0; i < styles.length; i++) {
  2575. var item = styles[i];
  2576. var domStyle = stylesInDom[item.id];
  2577.  
  2578. if(domStyle) {
  2579. domStyle.refs++;
  2580.  
  2581. for(var j = 0; j < domStyle.parts.length; j++) {
  2582. domStyle.parts[j](item.parts[j]);
  2583. }
  2584.  
  2585. for(; j < item.parts.length; j++) {
  2586. domStyle.parts.push(addStyle(item.parts[j], options));
  2587. }
  2588. } else {
  2589. var parts = [];
  2590.  
  2591. for(var j = 0; j < item.parts.length; j++) {
  2592. parts.push(addStyle(item.parts[j], options));
  2593. }
  2594.  
  2595. stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};
  2596. }
  2597. }
  2598. }
  2599.  
  2600. function listToStyles (list, options) {
  2601. var styles = [];
  2602. var newStyles = {};
  2603.  
  2604. for (var i = 0; i < list.length; i++) {
  2605. var item = list[i];
  2606. var id = options.base ? item[0] + options.base : item[0];
  2607. var css = item[1];
  2608. var media = item[2];
  2609. var sourceMap = item[3];
  2610. var part = {css: css, media: media, sourceMap: sourceMap};
  2611.  
  2612. if(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});
  2613. else newStyles[id].parts.push(part);
  2614. }
  2615.  
  2616. return styles;
  2617. }
  2618.  
  2619. function insertStyleElement (options, style) {
  2620. var target = getElement(options.insertInto)
  2621.  
  2622. if (!target) {
  2623. throw new Error("Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.");
  2624. }
  2625.  
  2626. var lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];
  2627.  
  2628. if (options.insertAt === "top") {
  2629. if (!lastStyleElementInsertedAtTop) {
  2630. target.insertBefore(style, target.firstChild);
  2631. } else if (lastStyleElementInsertedAtTop.nextSibling) {
  2632. target.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);
  2633. } else {
  2634. target.appendChild(style);
  2635. }
  2636. stylesInsertedAtTop.push(style);
  2637. } else if (options.insertAt === "bottom") {
  2638. target.appendChild(style);
  2639. } else {
  2640. throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.");
  2641. }
  2642. }
  2643.  
  2644. function removeStyleElement (style) {
  2645. if (style.parentNode === null) return false;
  2646. style.parentNode.removeChild(style);
  2647.  
  2648. var idx = stylesInsertedAtTop.indexOf(style);
  2649. if(idx >= 0) {
  2650. stylesInsertedAtTop.splice(idx, 1);
  2651. }
  2652. }
  2653.  
  2654. function createStyleElement (options) {
  2655. var style = document.createElement("style");
  2656.  
  2657. options.attrs.type = "text/css";
  2658.  
  2659. addAttrs(style, options.attrs);
  2660. insertStyleElement(options, style);
  2661.  
  2662. return style;
  2663. }
  2664.  
  2665. function createLinkElement (options) {
  2666. var link = document.createElement("link");
  2667.  
  2668. options.attrs.type = "text/css";
  2669. options.attrs.rel = "stylesheet";
  2670.  
  2671. addAttrs(link, options.attrs);
  2672. insertStyleElement(options, link);
  2673.  
  2674. return link;
  2675. }
  2676.  
  2677. function addAttrs (el, attrs) {
  2678. Object.keys(attrs).forEach(function (key) {
  2679. el.setAttribute(key, attrs[key]);
  2680. });
  2681. }
  2682.  
  2683. function addStyle (obj, options) {
  2684. var style, update, remove, result;
  2685.  
  2686. // If a transform function was defined, run it on the css
  2687. if (options.transform && obj.css) {
  2688. result = options.transform(obj.css);
  2689.  
  2690. if (result) {
  2691. // If transform returns a value, use that instead of the original css.
  2692. // This allows running runtime transformations on the css.
  2693. obj.css = result;
  2694. } else {
  2695. // If the transform function returns a falsy value, don't add this css.
  2696. // This allows conditional loading of css
  2697. return function() {
  2698. // noop
  2699. };
  2700. }
  2701. }
  2702.  
  2703. if (options.singleton) {
  2704. var styleIndex = singletonCounter++;
  2705.  
  2706. style = singleton || (singleton = createStyleElement(options));
  2707.  
  2708. update = applyToSingletonTag.bind(null, style, styleIndex, false);
  2709. remove = applyToSingletonTag.bind(null, style, styleIndex, true);
  2710.  
  2711. } else if (
  2712. obj.sourceMap &&
  2713. typeof URL === "function" &&
  2714. typeof URL.createObjectURL === "function" &&
  2715. typeof URL.revokeObjectURL === "function" &&
  2716. typeof Blob === "function" &&
  2717. typeof btoa === "function"
  2718. ) {
  2719. style = createLinkElement(options);
  2720. update = updateLink.bind(null, style, options);
  2721. remove = function () {
  2722. removeStyleElement(style);
  2723.  
  2724. if(style.href) URL.revokeObjectURL(style.href);
  2725. };
  2726. } else {
  2727. style = createStyleElement(options);
  2728. update = applyToTag.bind(null, style);
  2729. remove = function () {
  2730. removeStyleElement(style);
  2731. };
  2732. }
  2733.  
  2734. update(obj);
  2735.  
  2736. return function updateStyle (newObj) {
  2737. if (newObj) {
  2738. if (
  2739. newObj.css === obj.css &&
  2740. newObj.media === obj.media &&
  2741. newObj.sourceMap === obj.sourceMap
  2742. ) {
  2743. return;
  2744. }
  2745.  
  2746. update(obj = newObj);
  2747. } else {
  2748. remove();
  2749. }
  2750. };
  2751. }
  2752.  
  2753. var replaceText = (function () {
  2754. var textStore = [];
  2755.  
  2756. return function (index, replacement) {
  2757. textStore[index] = replacement;
  2758.  
  2759. return textStore.filter(Boolean).join('\n');
  2760. };
  2761. })();
  2762.  
  2763. function applyToSingletonTag (style, index, remove, obj) {
  2764. var css = remove ? "" : obj.css;
  2765.  
  2766. if (style.styleSheet) {
  2767. style.styleSheet.cssText = replaceText(index, css);
  2768. } else {
  2769. var cssNode = document.createTextNode(css);
  2770. var childNodes = style.childNodes;
  2771.  
  2772. if (childNodes[index]) style.removeChild(childNodes[index]);
  2773.  
  2774. if (childNodes.length) {
  2775. style.insertBefore(cssNode, childNodes[index]);
  2776. } else {
  2777. style.appendChild(cssNode);
  2778. }
  2779. }
  2780. }
  2781.  
  2782. function applyToTag (style, obj) {
  2783. var css = obj.css;
  2784. var media = obj.media;
  2785.  
  2786. if(media) {
  2787. style.setAttribute("media", media)
  2788. }
  2789.  
  2790. if(style.styleSheet) {
  2791. style.styleSheet.cssText = css;
  2792. } else {
  2793. while(style.firstChild) {
  2794. style.removeChild(style.firstChild);
  2795. }
  2796.  
  2797. style.appendChild(document.createTextNode(css));
  2798. }
  2799. }
  2800.  
  2801. function updateLink (link, options, obj) {
  2802. var css = obj.css;
  2803. var sourceMap = obj.sourceMap;
  2804.  
  2805. /*
  2806. If convertToAbsoluteUrls isn't defined, but sourcemaps are enabled
  2807. and there is no publicPath defined then lets turn convertToAbsoluteUrls
  2808. on by default. Otherwise default to the convertToAbsoluteUrls option
  2809. directly
  2810. */
  2811. var autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;
  2812.  
  2813. if (options.convertToAbsoluteUrls || autoFixUrls) {
  2814. css = fixUrls(css);
  2815. }
  2816.  
  2817. if (sourceMap) {
  2818. // http://stackoverflow.com/a/26603875
  2819. css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */";
  2820. }
  2821.  
  2822. var blob = new Blob([css], { type: "text/css" });
  2823.  
  2824. var oldSrc = link.href;
  2825.  
  2826. link.href = URL.createObjectURL(blob);
  2827.  
  2828. if(oldSrc) URL.revokeObjectURL(oldSrc);
  2829. }
  2830.  
  2831.  
  2832. /***/ }),
  2833. /* 33 */
  2834. /***/ (function(module, exports) {
  2835.  
  2836.  
  2837. /**
  2838. * When source maps are enabled, `style-loader` uses a link element with a data-uri to
  2839. * embed the css on the page. This breaks all relative urls because now they are relative to a
  2840. * bundle instead of the current page.
  2841. *
  2842. * One solution is to only use full urls, but that may be impossible.
  2843. *
  2844. * Instead, this function "fixes" the relative urls to be absolute according to the current page location.
  2845. *
  2846. * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.
  2847. *
  2848. */
  2849.  
  2850. module.exports = function (css) {
  2851. // get current location
  2852. var location = typeof window !== "undefined" && window.location;
  2853.  
  2854. if (!location) {
  2855. throw new Error("fixUrls requires window.location");
  2856. }
  2857.  
  2858. // blank or null?
  2859. if (!css || typeof css !== "string") {
  2860. return css;
  2861. }
  2862.  
  2863. var baseUrl = location.protocol + "//" + location.host;
  2864. var currentDir = baseUrl + location.pathname.replace(/\/[^\/]*$/, "/");
  2865.  
  2866. // convert each url(...)
  2867. /*
  2868. This regular expression is just a way to recursively match brackets within
  2869. a string.
  2870.  
  2871. /url\s*\( = Match on the word "url" with any whitespace after it and then a parens
  2872. ( = Start a capturing group
  2873. (?: = Start a non-capturing group
  2874. [^)(] = Match anything that isn't a parentheses
  2875. | = OR
  2876. \( = Match a start parentheses
  2877. (?: = Start another non-capturing groups
  2878. [^)(]+ = Match anything that isn't a parentheses
  2879. | = OR
  2880. \( = Match a start parentheses
  2881. [^)(]* = Match anything that isn't a parentheses
  2882. \) = Match a end parentheses
  2883. ) = End Group
  2884. *\) = Match anything and then a close parens
  2885. ) = Close non-capturing group
  2886. * = Match anything
  2887. ) = Close capturing group
  2888. \) = Match a close parens
  2889.  
  2890. /gi = Get all matches, not the first. Be case insensitive.
  2891. */
  2892. var fixedCss = css.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi, function(fullMatch, origUrl) {
  2893. // strip quotes (if they exist)
  2894. var unquotedOrigUrl = origUrl
  2895. .trim()
  2896. .replace(/^"(.*)"$/, function(o, $1){ return $1; })
  2897. .replace(/^'(.*)'$/, function(o, $1){ return $1; });
  2898.  
  2899. // already a full url? no change
  2900. if (/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/)/i.test(unquotedOrigUrl)) {
  2901. return fullMatch;
  2902. }
  2903.  
  2904. // convert the url to a full url
  2905. var newUrl;
  2906.  
  2907. if (unquotedOrigUrl.indexOf("//") === 0) {
  2908. //TODO: should we add protocol?
  2909. newUrl = unquotedOrigUrl;
  2910. } else if (unquotedOrigUrl.indexOf("/") === 0) {
  2911. // path should be relative to the base url
  2912. newUrl = baseUrl + unquotedOrigUrl; // already starts with '/'
  2913. } else {
  2914. // path should be relative to current directory
  2915. newUrl = currentDir + unquotedOrigUrl.replace(/^\.\//, ""); // Strip leading './'
  2916. }
  2917.  
  2918. // send back the fixed url(...)
  2919. return "url(" + JSON.stringify(newUrl) + ")";
  2920. });
  2921.  
  2922. // send back the fixed css
  2923. return fixedCss;
  2924. };
  2925.  
  2926.  
  2927. /***/ })
  2928. /******/ ]);

QingJ © 2025

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