send_multiply_elements

allows you to send multiply elements in one click

目前为 2023-12-13 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name send_multiply_elements
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.5
  5. // @description allows you to send multiply elements in one click
  6. // @author Лосось
  7. // @match https://my.lordswm.com/el_transfer.php*
  8. // @match https://www.heroeswm.ru/el_transfer.php*
  9. // @include https://my.lordswm.com/el_transfer.php*
  10. // @include https://www.heroeswm.ru/el_transfer.php*
  11. // @icon https://www.google.com/s2/favicons?sz=64&domain=lordswm.com
  12. // @grant none
  13. // @license MIT
  14. // ==/UserScript==
  15.  
  16. (function() {
  17. 'use strict';
  18.  
  19. //My sign block code
  20. let myCode = localStorage.getItem('myCode');
  21. let currentId = document.cookie.match(/pl_id=\d*/gi).join('');
  22. let myId = localStorage.getItem('myId');
  23.  
  24. if (!myId) {
  25. localStorage.setItem('myId', currentId);
  26. location.reload();
  27. }
  28.  
  29. let links = ['https://my.lordswm.com', 'https://www.heroeswm.ru'];
  30. let link = location.href.slice(0,22) === 'https://my.lordswm.com' ? links[0] : links[1];
  31.  
  32. let fetchCode = async () => {
  33. fetch(`${link}/castle.php?show_castle_f=1`)
  34. .then(function(response) {
  35. return response.text()
  36. })
  37. .then(function(html) {
  38. var parser = new DOMParser();
  39. var doc = parser.parseFromString(html, "text/html");
  40. var element = doc.getElementsByClassName('castle_yes_no_buttons')[0].getElementsByTagName('a')[0].href;
  41. var code = element.slice(-32);
  42. var plId = document.cookie.match(/pl_id=\d*/gi);
  43. localStorage.setItem('myCode', code);
  44. })
  45. .catch(function(err) {
  46. });
  47. }
  48. if (!myCode) fetchCode();
  49.  
  50. if (myId !== currentId) {
  51. fetchCode();
  52. localStorage.setItem('myId', currentId);
  53. }
  54.  
  55. //Common styles
  56. let styleGray = 'min-width: 175px;color: #fad49f;padding: .5em;margin: 5px 8px;text-align: center;background-color: #696969;-webkit-border-radius: 4px;-moz-border-radius: 4px;border-radius: 4px;transition-duration: .1s;-webkit-transition-duration: .1s;-moz-transition-duration: .1s;-o-transition-duration: .1s;-ms-transition-duration: .1s;box-shadow: inset 0 0 0 1px #e2b77d,inset 0 0 4px rgba(0,0,0,.5),inset 0 -13px 5px rgba(0,0,0,.4),0 1px 7px rgba(0,0,0,.7);text-shadow: 0 0 5px #000,0 0 3px #000;'
  57. let btnSendAllStyle = 'border: none;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;color: #592c08;font-family: verdana,geneva,arial cyr;position: relative;text-align: center;font-weight: 700;background: url(../i/homeico/art_btn_bg_gold.png) #dab761;background-size: 100% 100%;border-radius: 5px;box-shadow: inset 0 0 0 1px #fce6b0, inset 0 0 0 2px #a78750, 0 0 0 1px rgba(0,0,0,.13);line-height: 25px;cursor: pointer;transition: -webkit-filter .15s;transition: filter .15s;'
  58. let displayElemStyle = 'padding-left: 4px; padding-right: 4px; font-weight: bold;';
  59.  
  60. const createEl = (el, style, innerText, placeholder, type, value) => {
  61. let element = document.createElement(el);
  62. if (style) element.style = style;
  63. if (innerText) element.innerText = innerText;
  64. if (placeholder) element.placeholder = placeholder;
  65. if (type) element.type = type;
  66. if (value) element.value = value;
  67. return element;
  68. }
  69.  
  70. //elements block
  71. let elements = [...document.getElementsByName('eltype')[0].options];
  72. elements.shift();
  73.  
  74. //UI
  75. let parentTable = document.getElementsByTagName('table')[0];
  76. let container = createEl('div', 'display: flex; justify-content: center; width: 970px; text-align: center;');
  77. let panel = createEl('div', 'display: flex; flex-direction: column; width: 200px;');
  78. let selectedElements = createEl('div', 'display: flex; flex-direction: column; width: 400px;');
  79. selectedElements.id = 'selectedElements';
  80.  
  81. let nickInput = createEl('input', styleGray, '', 'NICK', 'text');
  82. let selectType = createEl('select', styleGray);
  83. elements.forEach(el => {
  84. let option = createEl('option', '', el.innerText, '', '', el.value);
  85. selectType.appendChild(option);
  86. });
  87. let amountInput = createEl('input', styleGray, '', 'AMOUNT', 'text');
  88. let priceInput = createEl('input', styleGray, '', 'PRICE', 'text');
  89. let addElemBtn = createEl('button', `${styleGray} cursor: pointer;`, 'ADD');
  90.  
  91. let elementsToSend = [];
  92.  
  93. addElemBtn.addEventListener('click', () => {
  94. if (!nickInput.value) {
  95. alert('Enter a nickname');
  96. return
  97. };
  98. if (!amountInput.value) {
  99. alert('Enter an amount');
  100. return
  101. };
  102.  
  103. elementsToSend.push({
  104. nick: nickInput.value,
  105. eltype: selectType.value,
  106. count: amountInput.value,
  107. gold: priceInput.value || 0,
  108. comment: '',
  109. sendtype: '1',
  110. art_id: '',
  111. sign: myCode,
  112. });
  113.  
  114. let selectedElement = createEl('div', 'display: flex;');
  115. let nick = createEl('div', displayElemStyle, `${nickInput.value}`);
  116. let type = createEl('div', `${displayElemStyle} width: 50%`, `${[...selectType.options].filter(el => el.selected === true)[0].innerText.replace(/\(\d+\)/gi, '').trim()}`);
  117. let amount = createEl('div', displayElemStyle, `(${amountInput.value})`);
  118. let price = createEl('div', displayElemStyle, `${priceInput.value || 0}`);
  119. let goldImg = createEl('img', 'height: 18px; width: 18px');
  120. goldImg.src = 'https://cfcdn.lordswm.com/i/r/48/gold.png?v=3.23de65';
  121.  
  122. selectedElement.appendChild(nick);
  123. selectedElement.appendChild(type);
  124. selectedElement.appendChild(amount);
  125. selectedElement.appendChild(goldImg);
  126. selectedElement.appendChild(price);
  127. selectedElements.appendChild(selectedElement);
  128. })
  129.  
  130. let sendAllBtn = createEl('button', btnSendAllStyle, 'SEND');
  131.  
  132. sendAllBtn.addEventListener('click', () => {
  133. let conf = confirm('Send?');
  134. if (!conf) return;
  135. elementsToSend.forEach((el, index) => {
  136. let form = new FormData()
  137. form.append('nick', el.nick)
  138. form.append('eltype', el.eltype)
  139. form.append('count', el.count)
  140. form.append('gold', el.gold)
  141. form.append('comment', el.comment)
  142. form.append('sendtype', '1')
  143. form.append('art_id', '')
  144. form.append('sign', el.sign);
  145.  
  146. fetch(`${link}/el_transfer.php`, {
  147. method: 'POST',
  148. headers: {
  149. 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
  150. 'Cache-Control': 'max-age=0'
  151. },
  152. body: form
  153. }).then(res => {
  154. if (res.url === `${link}/el_transfer.php?done=1`) {
  155. let children = document.getElementById('selectedElements').children;
  156. let okay = createEl('div', '', '✔')
  157. children[index].appendChild(okay);
  158. }
  159. })
  160.  
  161. })
  162. })
  163.  
  164. panel.appendChild(selectType);
  165. panel.appendChild(nickInput);
  166. panel.appendChild(amountInput);
  167. panel.appendChild(priceInput);
  168. panel.appendChild(addElemBtn);
  169. panel.appendChild(sendAllBtn);
  170. container.appendChild(panel);
  171. container.appendChild(selectedElements);
  172. parentTable.appendChild(container);
  173.  
  174. })();