hwm_roulette

hwm_roulette_script

目前為 2023-12-01 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name hwm_roulette
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description hwm_roulette_script
  6. // @author Salmon
  7. // @match https://my.lordswm.com/roulette.php*
  8. // @match https://www.heroeswm.ru/roulette.php*
  9. // @include https://my.lordswm.com/roulette.php*
  10. // @include https://www.heroeswm.ru/roulette.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. const styledBtn = '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;'
  19. const nums = ['0', '00', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36'];
  20. const icon = 'https://cfcdn.lordswm.com/i/pl_info/btn_reset.png';
  21.  
  22. const createEl = (el, style, innerText, placeholder, type) => {
  23. let element = document.createElement(el);
  24. if (style) element.style = style;
  25. if (innerText) element.innerText = innerText;
  26. if (placeholder) element.placeholder = placeholder;
  27. if (type) element.type = type;
  28. return element;
  29. }
  30.  
  31. let link = [...document.getElementsByTagName('a')];
  32. link = link.filter(el => el.innerText === 'Прошлая игра');
  33. if (link[1] === undefined) {
  34. setTimeout(() => location.reload, 10000);
  35. return;
  36. } else {
  37. link = link[1].href;
  38. }
  39.  
  40. const fetchXml = (callback) => {
  41. const xhr = new XMLHttpRequest();
  42. xhr.open('get', link);
  43. xhr.setRequestHeader('Content-type', 'text/html; charset=windows-1251');
  44. if (xhr.overrideMimeType) {
  45. xhr.overrideMimeType('text/html; charset=windows-1251');
  46. }
  47.  
  48. xhr.addEventListener('load', () => {
  49. let parser = new DOMParser();
  50. let doc = parser.parseFromString(xhr.responseText, "text/html");
  51. callback(doc);
  52. })
  53. xhr.send();
  54. }
  55.  
  56. //Init bet buttons and inputs
  57. let betInput = [...document.getElementsByTagName('input')]
  58. betInput = betInput.filter(el => el.name === 'bet')[0];
  59.  
  60. let betType = [...document.getElementsByTagName('input')]
  61. betType = betType.filter(el => el.name === 'bettype')[0];
  62.  
  63. let betBtn = [...document.getElementsByTagName('input')]
  64. betBtn = betBtn.filter(el => el.value === 'Поставить!')[0];
  65.  
  66. //Creating panel element and playstyle buttons
  67. const panel = createEl('div', 'position: absolute; top: 100px; right: 30px; width: 450px; heigth: 250px; border: 1px solid red; background-color: wheat; padding: 7px; text-align: center', '');
  68. const betHistoryBlock = createEl('div', 'position: absolute; top: 300px; right: 30px;');
  69. const block = createEl('table');
  70. betHistoryBlock.appendChild(block);
  71. document.body.appendChild(betHistoryBlock);
  72.  
  73. // const fetchXml = () => {
  74. // return new Promise((resolve, reject) => {
  75. // const xhr = new XMLHttpRequest();
  76. // xhr.open('get', 'https://my.lordswm.com/inforoul.php?id');
  77. // xhr.setRequestHeader('Content-type', 'text/html; charset=windows-1251');
  78. // if (xhr.overrideMimeType) {
  79. // xhr.overrideMimeType('text/html; charset=windows-1251');
  80. // }
  81.  
  82. // xhr.addEventListener('load', () => {
  83. // let parser = new DOMParser();
  84. // let doc = parser.parseFromString(xhr.responseText, "text/html");
  85. // let betHistory = doc.getElementsByTagName('table')[1];
  86. // betHistory = [...betHistory.getElementsByTagName('tr')];
  87. // let time = betHistory[0];
  88. // let bet = betHistory[3];
  89. // block.innerHTML = `<table class="wbwhite"><tbody>${betHistoryBlock.innerHTML} ${time.innerHTML} ${bet.innerHTML} </tbody></table>`;
  90. // })
  91. // xhr.send();
  92. // })}
  93.  
  94. let playOneNum = JSON.parse(localStorage.getItem('playOneNum'));
  95. if (playOneNum === null) localStorage.setItem('playOneNum', JSON.stringify(true));
  96.  
  97. let playMultiNums = JSON.parse(localStorage.getItem('playMultiNums'));
  98. if (playMultiNums === null) localStorage.setItem('playMultiNums', JSON.stringify(false));
  99.  
  100. let playToogle = JSON.parse(localStorage.getItem('playToogle'));
  101. if (playToogle === null) localStorage.setItem('playToogle', JSON.stringify(false));
  102.  
  103. const playStyleLabel = createEl('div', 'text-align: center; font-size: 14px; font-weight: bold; ', `Сейчас включен режим ${playOneNum ? '1 число по кругу' : '4 числа по кругу'}`)
  104. const setPlayOneNum = createEl('button', styledBtn, 'Играть 1 число по кругу');
  105. const setPlayMultiNums = createEl('button', styledBtn, 'Играть 4 числа по кругу');
  106. const setPlayToogle = createEl('button', styledBtn, `${playToogle ? 'Остановить скрипт' : 'Запустить скрипт'}`)
  107.  
  108. setPlayOneNum.addEventListener('click', () => {
  109. localStorage.setItem('playOneNum', JSON.stringify(true));
  110. localStorage.setItem('playMultiNums', JSON.stringify(false));
  111. location.reload();
  112. });
  113.  
  114. setPlayMultiNums.addEventListener('click', () => {
  115. localStorage.setItem('playOneNum', JSON.stringify(false));
  116. localStorage.setItem('playMultiNums', JSON.stringify(true));
  117. location.reload();
  118. });
  119.  
  120. setPlayToogle.addEventListener('click', () => {
  121. let toogle = playToogle;
  122. localStorage.setItem('playToogle', JSON.stringify(!playToogle));
  123. location.reload();
  124. });
  125.  
  126. panel.appendChild(playStyleLabel);
  127. panel.appendChild(setPlayOneNum);
  128. panel.appendChild(setPlayMultiNums);
  129. panel.appendChild(setPlayToogle);
  130. document.body.appendChild(panel);
  131.  
  132. //Gameplays
  133. if (playOneNum === true) {
  134. let temporaryNumsArray = JSON.parse(localStorage.getItem('temporaryNumsArray'));
  135. let numsCounter = JSON.parse(localStorage.getItem('numsCounter'));
  136.  
  137. if (numsCounter == null) {
  138. localStorage.setItem('numsCounter', JSON.stringify(0));
  139. location.reload();
  140. }
  141.  
  142. if (!temporaryNumsArray) {
  143. localStorage.setItem('temporaryNumsArray', JSON.stringify(nums));
  144. location.reload();
  145. }
  146.  
  147. const playBlock = createEl('div', 'diplay: flex; flex-directon: column');
  148. const setNumsCounterInput = createEl('input', 'height: 25px; width: 250px; border: 1px solid #592c08; border-radius: 5px;', '', 'количество прокруток всех чисел', 'number');
  149. const setNumsCounterBtn = createEl('button', styledBtn, 'Задать');
  150. const numsCounertInfoBlock = createEl('div', '', '');
  151. playBlock.appendChild(setNumsCounterInput);
  152. playBlock.appendChild(setNumsCounterBtn);
  153. playBlock.appendChild(numsCounertInfoBlock);
  154.  
  155.  
  156. numsCounertInfoBlock.innerText = `Осталось прокруток ${temporaryNumsArray.length} | Следующее число ${temporaryNumsArray.at(0)}`;
  157.  
  158. setNumsCounterBtn.addEventListener('click', () => {
  159. let num = Number(setNumsCounterInput.value);
  160. if (num > 0) {
  161. localStorage.setItem('numsCounter', JSON.stringify(num * nums.length));
  162. let temp = [];
  163. for (let i = 0; i < num; i++) {
  164. temp = [...temp, ...nums];
  165. }
  166. localStorage.setItem('temporaryNumsArray', JSON.stringify(temp));
  167. location.reload();
  168. }
  169. });
  170.  
  171.  
  172. panel.appendChild(playBlock);
  173.  
  174. let checkMyBet = [...document.getElementsByTagName('center')];
  175. checkMyBet = checkMyBet[3].parentElement;
  176. checkMyBet = checkMyBet.getElementsByTagName('tr')[1].getElementsByTagName('td')[1].innerText;
  177.  
  178. if (playToogle) {
  179. if (checkMyBet.includes('Straight up')) {
  180. return;
  181. } else if (temporaryNumsArray.length && numsCounter > 0) {
  182. betInput.value = '100';
  183. betType.value = `Straight up ${temporaryNumsArray[0]}`;
  184. temporaryNumsArray.shift();
  185. localStorage.setItem('temporaryNumsArray', JSON.stringify(temporaryNumsArray));
  186. fetchXml();
  187. betBtn.click();
  188. }
  189. }
  190. }
  191.  
  192. if (playMultiNums === true) {
  193. let multiNumsMainArray = JSON.parse(localStorage.getItem('multiNumsMainArray'));
  194. let multiNumsAdditionalArray = JSON.parse(localStorage.getItem('multiNumsAdditionalArray'));
  195. let gameIndex = localStorage.getItem('gameIndex');
  196. let multiNumsCounter = localStorage.getItem('multiNumsCounter');
  197.  
  198. if (multiNumsMainArray === null) {
  199. localStorage.setItem('multiNumsMainArray', JSON.stringify([]));
  200. location.reload();
  201. }
  202.  
  203. if (multiNumsAdditionalArray === null) {
  204. localStorage.setItem('multiNumsAdditionalArray', JSON.stringify([]));
  205. location.reload();
  206. }
  207.  
  208. if (gameIndex === null) {
  209. localStorage.setItem('gameIndex', 0);
  210. location.reload();
  211. }
  212.  
  213. if (multiNumsCounter === null) {
  214. localStorage.setItem('multiNumsCounter', 0);
  215. location.reload();
  216. }
  217.  
  218. const playBlock = createEl('div', 'diplay: flex; flex-directon: column');
  219.  
  220. const setmultiNumsMainArray = createEl('input', 'height: 25px; width: 250px; border: 1px solid #592c08; border-radius: 5px;', '', 'основной массив', 'text');
  221. const setmultiNumsAdditionalArray = createEl('input', 'height: 25px; width: 250px; border: 1px solid #592c08; border-radius: 5px;', '', 'дополнительный массив', 'text');
  222. const setmultiNumsCounter = createEl('input', 'height: 25px; width: 250px; border: 1px solid #592c08; border-radius: 5px;', '', 'число повторений', 'number');
  223. const setMainArrayBtn = createEl('button', styledBtn, 'Задать числа основного массива');
  224. const setAdditionalArrayBtn = createEl('button', styledBtn, 'Задать числа дополнительного массива');
  225. const setMultiNumsCounterBtn = createEl('button', styledBtn, 'Задать числа повторений');
  226. const resetBtn = createEl('div', 'width: 40px; height: 40px; cursor: pointer;');
  227. resetBtn.innerHTML = `<div><img style='width: 40px; height: 40px' src='https://cfcdn.lordswm.com/i/pl_info/btn_reset.png'/></div>`;
  228.  
  229. const multiNumsMainArrayInfoBlock = createEl('div', '', `Текущий основной массив: ${multiNumsMainArray}`);
  230. const multiNumsAdditionalArrayInfoBlock = createEl('div', '', `Текущий дополнительный массив: ${multiNumsAdditionalArray}`);
  231. const multiNumsCounterInfoBlock = createEl('div', '', `Количество повторений: ${multiNumsCounter}`);
  232.  
  233. setMainArrayBtn.addEventListener('click', () => {
  234. let nums = setmultiNumsMainArray.value;
  235. nums = nums.split(' ');
  236. localStorage.setItem('multiNumsMainArray', JSON.stringify(nums));
  237. location.reload();
  238. });
  239.  
  240. setAdditionalArrayBtn.addEventListener('click', () => {
  241. let nums = setmultiNumsAdditionalArray.value;
  242. nums = nums.split(' ');
  243. localStorage.setItem('multiNumsAdditionalArray', JSON.stringify(nums));
  244. location.reload();
  245. })
  246.  
  247. setMultiNumsCounterBtn.addEventListener('click', () => {
  248. if (!setmultiNumsCounter.value) {
  249. alert('Необходимо указать число');
  250. } else {
  251. localStorage.setItem('multiNumsCounter', Number(setmultiNumsCounter.value));
  252. location.reload();
  253. }
  254. })
  255.  
  256. resetBtn.addEventListener('click', () => {
  257. localStorage.setItem('multiNumsMainArray', JSON.stringify([]));
  258. localStorage.setItem('multiNumsAdditionalArray', JSON.stringify([]));
  259. localStorage.setItem('gameIndex', 0);
  260. localStorage.setItem('multiNumsCounter', 0);
  261. location.reload();
  262. })
  263.  
  264. playBlock.appendChild(setmultiNumsMainArray);
  265. playBlock.appendChild(multiNumsMainArrayInfoBlock);
  266. playBlock.appendChild(setMainArrayBtn);
  267. playBlock.appendChild(setmultiNumsAdditionalArray);
  268. playBlock.appendChild(multiNumsAdditionalArrayInfoBlock);
  269. playBlock.appendChild(setAdditionalArrayBtn);
  270. playBlock.appendChild(multiNumsCounterInfoBlock);
  271. playBlock.appendChild(setmultiNumsCounter);
  272. playBlock.appendChild(setMultiNumsCounterBtn);
  273. playBlock.appendChild(resetBtn);
  274.  
  275. panel.appendChild(playBlock);
  276.  
  277. let checkMyBet = [...document.getElementsByTagName('center')];
  278. checkMyBet = checkMyBet[3].parentElement;
  279. let checkMyFirstBet = checkMyBet.getElementsByTagName('tr')[1].getElementsByTagName('td')[1].innerText;
  280. let checkMySecondBet = '';
  281. let checkMyThirdBet = '';
  282. let checkMyFourthBet = '';
  283.  
  284. if (checkMyBet.getElementsByTagName('tr')[2]) checkMySecondBet = checkMyBet.getElementsByTagName('tr')[2].getElementsByTagName('td')[1].innerText;
  285. if (checkMyBet.getElementsByTagName('tr')[3]) checkMyThirdBet = checkMyBet.getElementsByTagName('tr')[3].getElementsByTagName('td')[1].innerText;
  286. if (checkMyBet.getElementsByTagName('tr')[4]) checkMyFourthBet = checkMyBet.getElementsByTagName('tr')[4].getElementsByTagName('td')[1].innerText;
  287.  
  288.  
  289. if (playToogle && Number(multiNumsCounter) > 0) {
  290. if (+gameIndex >= 4) {
  291. localStorage.setItem('gameIndex', 0);
  292. localStorage.setItem('multiNumsCounter', Number(multiNumsCounter) - 1);
  293. location.reload();
  294. }
  295. const checkLastBet = (doc) => {
  296. let lastNumber = doc.getElementsByTagName('table')[1];
  297. lastNumber = lastNumber.firstChild;
  298. lastNumber = lastNumber.firstChild.getElementsByTagName('b')[0].innerText;
  299.  
  300. if (multiNumsMainArray.indexOf(lastNumber) !== -1) {
  301. multiNumsMainArray = multiNumsMainArray.filter(el => el !== lastNumber);
  302. multiNumsMainArray.push(multiNumsAdditionalArray[0]);
  303. localStorage.setItem('multiNumsMainArray', JSON.stringify(multiNumsMainArray));
  304. multiNumsAdditionalArray.shift();
  305. localStorage.setItem('multiNumsAdditionalArray', JSON.stringify(multiNumsAdditionalArray));
  306. location.reload();
  307. }
  308. if (checkMyFirstBet.includes('Straight up') && checkMySecondBet.includes('Straight up') && checkMyThirdBet.includes('Straight up') && checkMyFourthBet.includes('Straight up')) {
  309. return;
  310. } else {
  311. betInput.value = '100';
  312. betType.value = `Straight up ${multiNumsMainArray[gameIndex]}`;
  313. localStorage.setItem('gameIndex', Number(gameIndex) + 1);
  314. betBtn.click();
  315. }
  316. }
  317. fetchXml(checkLastBet);
  318. }
  319. }
  320.  
  321. })();