hwm_roulette

hwm_roulette_script

当前为 2023-12-01 提交的版本,查看 最新版本

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