NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name TI.auto // @namespace https://vk.com/TroExol // @version 1.0.0.1 // @description Автоматическая продажа и покупка // @author TroExol // @copyright 2018, TroExol (https://vk.com/TroExol) // @match https://tradeit.gg/inventory // @license MIT // @grant none // ==/UserScript== // ==OpenUserJS== // @author TroExol // ==/OpenUserJS== function time_unix(){ return parseInt(new Date().getTime()/10) } if (localStorage.getItem('tr_id_user') === null) { localStorage.setItem('tr_id_user', time_unix()); } $('head').append('<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">'); function loadScript(url) { s = document.createElement('script'); s.src = url; (document.head || document.documentElement).appendChild(s) console.log('Загружено '+url); } loadScript('https://progamestak.ru/src/libs/js/jquery.min.js'); $(document).ready(function() { $('head').append('<style>.config {position: fixed; z-index: 99999; width: 266px; border: 1px solid #fff; padding: 5px; background-color: rgba(31, 33, 38, 0.7); color: rgba(255,255,255,1); font-size: 13px;} ul,li {list-style-type: none;} a, a:active, a:focus, button, button:active, button:focus, input, input:active, input:focus{outline: none; text-decoration: none; border: none;} .logs h2{font-size: 1rem;} .logs hr {margin-block-start: 2px;margin: 4px 0;background: #fff;} .logs {position: fixed; z-index: 99999; width: 170px; border: 1px solid #fff; padding: 5px; background-color: rgba(31, 33, 38, 0.7); color: rgba(255,255,255,1); font-size: 13px;} .logs ul {padding: 3px; color: aquamarine; word-wrap: break-word; height: 203px; overflow: auto;}</style>'); // От какого процента прибыли var from_percent_profit = 0, // От скольки $ закупать (0 - выключено) from_price_buy = 0, // От скольки $ желаемой продажи предмета после трейд бана (0 - выключено) from_price_sell = 0, // До скольки $ закупать (0 - выключено) to_price_buy = 0, // До скольки $ желаемой продажи предмета после трейд бана (0 - выключено) to_price_sell = 0, // Перезагрузка страницы каждые ? мин time_to_reload = 7, // Задержка трейд бана ban_days_config = 4, // Автопокупка auto_buy = 'false', // Автопродажа auto_sell = 'false'; function config_edit() { $.ajax({ url: 'http://progamestak.ru/tradeit/logs.php/', type: 'POST', dataType: 'html', data: { query_type: 'config_edit', id_user: localStorage.getItem('tr_id_user'), from_percent_profit: $('#from_percent_profit').val(), from_price_buy: $('#from_price_buy').val(), from_price_sell: $('#from_price_sell').val(), to_price_buy: $('#to_price_buy').val(), to_price_sell: $('#to_price_sell').val(), time_to_reload: $('#time_to_reload').val(), ban_days_config: $('#ban_days_config').val(), auto_sell: $('#auto_sell').is(':checked'), auto_buy: $('#auto_buy').is(':checked') } }) .done(function() { console.log('Сохранено'); }) .fail(function() { console.log("Ошибка изменения настроек"); }) } setTimeout(function() { $('#config_edit').click(function() {config_edit();}); },1000); $.ajax({ url: 'http://progamestak.ru/tradeit/logs.php/', type: 'POST', dataType: 'json', data: { query_type: 'take_config', id_user: localStorage.getItem('tr_id_user') }, success: function(res){ if (res.success != 'error') { from_percent_profit = res.from_percent_profit; from_price_buy = res.from_price_buy; from_price_sell = res.from_price_sell; to_price_buy = res.to_price_buy; to_price_sell = res.to_price_sell; time_to_reload = res.time_to_reload; ban_days_config = res.ban_days; auto_sell = res.auto_sell; auto_buy = res.auto_buy; if (auto_sell == 'true') auto_sell = 'checked'; if (auto_buy == 'true') auto_buy = 'checked'; } else { from_percent_profit = 0; from_price_buy = 0; from_price_sell = 0; to_price_buy = 0; to_price_sell = 0; time_to_reload = 7; ban_days_config = 4; auto_sell = 'false'; auto_buy = 'false'; } // Блок настройки скрипта $('body').append('<div id="config" class="config" style="bottom: 5px; right: 5px;"><button id="config_edit" style="position: absolute; top:2px; right: 2px; cursor: pointer;">Сохранить</button><h2>Настройки</h2><label>Процент прибыли от<input id="from_percent_profit" type="number" value="'+from_percent_profit+'"></label><label>От скольки $ закупать (0-выкл)<input id="from_price_buy" type="number" value="'+from_price_buy+'"></label><label>От скольки $ желаемой продажи (0-выкл)<input id="from_price_sell" type="number" value="'+from_price_sell+'"></label><label>До скольки $ закупать (0-выкл)<input id="to_price_buy" type="number" value="'+to_price_buy+'"></label><label>До скольки $ желаемой продажи (0-выкл)<input id="to_price_sell" type="number" value="'+to_price_sell+'"></label><label>Перезагрузка страницы каждые (мин)<input id="time_to_reload" type="number" value="'+time_to_reload+'"></label><label>Макс трейд бан (дни)<input id="ban_days_config" type="number" value="'+ban_days_config+'"></label><label>Вкл автопокупку<input id="auto_buy" type="checkbox" '+auto_buy+'></label><label>Вкл автопродажу<input id="auto_sell" type="checkbox" '+auto_sell+'></label></div>'); }, error: function(res){ console.log("Ошибка получения настроек"); } }); from_percent_profit = $('#from_percent_profit').val(), from_price_buy = $('#from_price_buy').val(), from_price_sell = $('#from_price_sell').val(), to_price_buy = $('#to_price_buy').val(), to_price_sell = $('#to_price_sell').val(), time_to_reload = $('#time_to_reload').val(), ban_days_config = $('#ban_days_config').val(), auto_sell = $('#auto_sell').is(':checked'), auto_buy = $('#auto_buy').is(':checked'); setTimeout(function() { // Форматирование даты function formDate(str) { var date = new Date(); if (str.toLowerCase() == 'year') { res = date.getFullYear().toString().substr(-2); } if (str.toLowerCase() == 'month') { res = date.getMonth() + 1; if (res < 10) { res = '0' + res; } } else if (str.toLowerCase() == 'day') { var res = date.getDate(); if (res < 10) { res = '0' + res; } } else if (str.toLowerCase() == 'hours') { var res = date.getHours(); if (res < 10) { res = '0' + res; } } else if (str.toLowerCase() == 'minutes') { var res = date.getMinutes(); if (res < 10) { res = '0' + res; } } return res; }; // Создание даты function genDate() { var year = formDate('year'), month = formDate('month'), day = formDate('day'), hours = formDate('hours'), minutes = formDate('minutes'); return day+'.'+month+'.'+year+' '+hours+':'+minutes; } // Блок логов продажи $('body').append('<div id="logs_sell" class="logs" style="top: 5px; left: 5px;"><h2>Продажи</h2><ul></ul></div>'); // Блок логов покупки $('body').append('<div id="logs_buy" class="logs" style="top: 270px; left: 5px;"><h2>Покупки</h2><ul></ul></div>'); // Заполнение логов $.ajax({ url: 'https://progamestak.ru/tradeit/logs.php/', type: 'POST', dataType: 'json', data: { query_type: 'take_sells', id_user: localStorage.getItem('tr_id_user') }, success: function(res){ if (res.length != 0) { for (i=0; i < res.length; i++) { $('#logs_sell > ul').prepend('<li>'+res[i].name+'<br>Покупка за '+res[i].price_buy+'$<br>Продажа за '+res[i].price_sell+'$<br>Процент выгоды: '+res[i].percent+'<br>Время продажи: '+res[i].date+'</li><hr>'); } } }, error: function(res){ console.log("Ошибка получения логов"); } }); $.ajax({ url: 'https://progamestak.ru/tradeit/logs.php/', type: 'POST', dataType: 'json', data: { query_type: 'take_buy', id_user: localStorage.getItem('tr_id_user') }, success: function(res){ if (res.length != 0) { for (i=0; i < res.length; i++) { $('#logs_buy > ul').prepend('<li>'+res[i].name+'<br>Покупка за '+res[i].price_buy+'$<br>Продажа за '+res[i].price_sell+'$<br>Процент выгоды: '+res[i].percent+'%<br>Трейд бан: '+res[i].tradeban+' день/дня <br>Время покупки: '+res[i].date+'</li><hr>'); } } }, error: function(res){ console.log("Ошибка получения логов"); } }); from_percent_profit = $('#from_percent_profit').val(), from_price_buy = $('#from_price_buy').val(), from_price_sell = $('#from_price_sell').val(), to_price_buy = $('#to_price_buy').val(), to_price_sell = $('#to_price_sell').val(), time_to_reload = $('#time_to_reload').val(), ban_days_config = $('#ban_days_config').val(), auto_sell = $('#auto_sell').is(':checked'), auto_buy = $('#auto_buy').is(':checked'); if (auto_sell == true) { setTimeout(function() { if ($('#playerinv-content > tr') && $('#playerinv-content .btn-info').is('[onclick]')) { $('#playerinv-content > tr').each(function(i, e) { // Цена покупки var price_buy = parseFloat($(this).find('td:nth-child(2)').text().replace(/[^,.0-9]/gim, "")).toFixed(2), // Название шмотки name = $(this).find('td:nth-child(1)').text(), date = genDate(), // Кнопка продажи btn_sell = $(this).find('td:nth-child(4)').children('.btn-info'), // Цена продажи price_sell = parseFloat(btn_sell.text().replace(/[^,.0-9]/gim, "")).toFixed(2), // Процент выгоды percent = Math.floor((price_sell-price_buy)/(price_buy/100)); // Проверка на выгодность продажи и доступность кнопки if (percent >= from_percent_profit && btn_sell.is('[onclick]')) { // Сохрание лога $.ajax({ url: 'https://progamestak.ru/tradeit/logs.php/', type: 'POST', dataType: 'html', data: { query_type: 'create_logssell', id_user: localStorage.getItem('tr_id_user'), name: name, price_buy: price_buy, price_sell: price_sell, percent: percent, date: date }, }) .done(function() { $('#logs_sell > ul').prepend('<li>'+name+'<br>Покупка за '+price_buy+'$<br>Продажа за '+price_sell+'$<br>Процент выгоды: '+percent+'%<br>Дата продажи: '+date+'</li><hr>'); }) .fail(function() { console.log("Ошибка записи логов"); }) // Продажа btn_sell.click(); } }); // end each } }, 2000); } if (auto_buy == true) { // Получение страницы инвентаря var inv_page = $.ajax({ url: "https://tradeit.gg/inventory", async: false }).responseText; // Получение баланса аккаунта if (inv_page) { var bal = inv_page.match(/id="balance">.\s\d+\.\d+/); bal = bal[0].replace(/id="balance">.\s/, ''); } console.log('%cБаланс аккаунта: '+bal+'$', 'color: green'); // Получение инвентарей ботов var inv = $.ajax({ url: "https://inventory.tradeit.gg/sinv", async: false }).responseText; if (inv) { inv = JSON.parse(inv); // Преобразование в JSON объект // Получение инвентарей ботов в CS:GO var inv_cs = []; for (var i = 0; i < inv.length; i++) { inv_cs[i] = inv[i][730].items; } // Поиск выгодных предметов var max_profit_item = [], max_profit_item_name = [], ban_days = [], max_profit_percent = [], bot = []; ban_days[0] = 100; if (to_price_sell == 0) to_price_sell = 1000000; if (to_price_buy == 0) to_price_buy = 1000000; for (var i = 0; i < inv_cs.length; i++) { $.each(inv_cs[i], function(k, v) { // Цена со скидкой var price_buy = v.d[0].p, // Цена без скидки price_sell = v.p, // Качество предмета quality = v.e; // Поиск выгодных предметов if ( price_buy && price_sell >= from_price_sell*100 && price_sell <= to_price_sell*100 && price_buy <= to_price_buy*100 && price_buy >= from_price_buy*100 && Math.floor((price_sell-price_buy)/(price_buy/100)) >= from_percent_profit && (max_profit_percent[0] < Math.floor((price_sell-price_buy)/(price_buy/100)) || max_profit_percent.length == 0) ) { // Наличие трейд бана предмета if (v.d[0].r) { ban_days[2] = v.d[0].r-Math.floor(Date.now()/3600000); ban_days[2] = Math.ceil(ban_days[i]/24); if (ban_days[2] <= ban_days_config) { ban_days[1] = ban_days[0]; ban_days[0] = ban_days[2]; max_profit_item[1] = max_profit_item[0]; max_profit_item[0] = v; max_profit_item_name[1] = max_profit_item_name[0]; max_profit_item_name[0] = k; max_profit_percent[1] = max_profit_percent[0]; max_profit_percent[0] = Math.floor((price_sell-price_buy)/(price_buy/100)); bot[1] = bot[0]; bot[0] = i+1; } } else if (!v.d[0].r) { ban_days[1] = ban_days[0]; ban_days[0] = 'Без бана'; max_profit_item[1] = max_profit_item[0]; max_profit_item[0] = v; max_profit_item_name[1] = max_profit_item_name[0]; max_profit_item_name[0] = k; max_profit_percent[1] = max_profit_percent[0]; max_profit_percent[0] = Math.floor((price_sell-price_buy)/(price_buy/100)); bot[1] = bot[0]; bot[0] = i+1; } } }); } // Самый профитный предмет var price_buy = [], price_sell = [], item_index = [], dif_bal_buy = [], trade_success = false, quality = []; if (max_profit_item_name.length != 0) { for (i=0; i<max_profit_item.length, max_profit_item[i]; i++) { // Цена со скидкой price_buy[i] = max_profit_item[i].d[0].p, // Цена без скидки price_sell[i] = max_profit_item[i].p, // Индекс предмета item_index[i] = max_profit_item[i].d[0].i, // Разница между балансом и ценой покупки dif_bal_buy[i] = (price_buy[i]/100-bal).toFixed(2), // Название предмета max_profit_item_name[i] = max_profit_item_name[i].slice(11), // Качество предмета quality[i] = max_profit_item[i].e; if (typeof ban_days[i] == 'number') ban_days[i] = ban_days[i]+' день/дня/дней'; if (dif_bal_buy[i] < 0) { if (quality[i]) console.log('%c'+max_profit_item_name[i]+' '+quality[i]+' \n%cЦена со скидкой: '+price_buy[i]/100+'$ \nЦена без скидки: '+price_sell[i]/100+'$ \nВыгода: '+max_profit_percent[i]+'% \nВремя трейд бана: '+ban_days[i]+' \nБот: '+bot[i], 'color: #42827D;', 'color: #000;'); else console.log('%c'+max_profit_item_name[i]+' \n%cЦена со скидкой: '+price_buy[i]/100+'$ \nЦена без скидки: '+price_sell[i]/100+'$ \nВыгода: '+max_profit_percent[i]+'% \nВремя трейд бана: '+ban_days[i]+' \nБот: '+bot[i], 'color: #42827D;', 'color: #000;'); console.log(max_profit_item[i]); } else { if (quality[i]) console.log('%c'+max_profit_item_name[i]+' '+quality[i]+' \n%cЦена со скидкой: '+price_buy[i]/100+'$ \nЦена без скидки: '+price_sell[i]/100+'$ \nВыгода: '+max_profit_percent[i]+'% \nВремя трейд бана: '+ban_days[i]+' \nБот: '+bot[i], 'color: #42827D;', 'color: #000;'); else console.log('%c'+max_profit_item_name[i]+' \n%cЦена со скидкой: '+price_buy[i]/100+'$ \nЦена без скидки: '+price_sell[i]/100+'$ \nВыгода: '+max_profit_percent[i]+'% \nВремя трейд бана: '+ban_days[i]+' \nБот: '+bot[i], 'color: #42827D;', 'color: #000;'); if (quality[i]) console.log('%cНе хватает баланса: '+dif_bal_buy[i]+'$ для покупки '+max_profit_item_name[i]+' '+quality[i], 'color: red;'); else console.log('%cНе хватает баланса: '+dif_bal_buy[i]+'$ для покупки '+max_profit_item_name[i], 'color: red;'); console.log(max_profit_item[i]); } } } else console.log('%cВыгодные предметы отсутствуют', 'color: rgba(231, 54, 57, 1);'); } function randomInteger(min, max) { var rand = min - 0.5 + Math.random() * (max - min + 1) rand = Math.round(rand); return rand; } if (max_profit_item[0]) { var data_post = [], av_item = true; if (dif_bal_buy[0] < 0) { bot = bot[0]-1; index = item_index[0]+'_'+bot; data_post = {'sselected[]': index, 'value': price_buy[0]}; } else if (dif_bal_buy[1] < 0) { bot = bot[1]-1; index = item_index[1]+'_'+bot; data_post = {'sselected[]': index, 'value': price_buy[1]}; } else av_item = false; if (av_item == true) { $.ajax({ url: "https://tradeit.gg/reserve", type: 'POST', data: data_post, success: function(data) { console.log(data); data = JSON.parse(data); if (data.succes == false && max_profit_item[1] && dif_bal_buy[1] < 0 && data_post['sselected[]'] != item_index[1]) { setTimeout(function() { $.ajax({ url: "https://tradeit.gg/reserve", type: 'POST', data: { 'sselected[]': item_index[1]+'_'+bot[1]-1, value: price_buy[1] }, success: function(data) { console.log(data); date = JSON.parse(data); if (date.succes == true) { var data_logs = [], name = '', date = genDate(); if (quality[i]) name = max_profit_item_name[0]+' '+quality[0]; else name = max_profit_item_name[0]; $.ajax({ url: 'https://progamestak.ru/tradeit/logs.php/', type: 'POST', dataType: 'html', data: { query_type: 'create_logsbuy', id_user: localStorage.getItem('tr_id_user'), name: name, price_buy: price_buy[1]/100, price_sell: price_sell[1]/100, percent: max_profit_percent[1], tradeban: ban_days[1], date: date }, }) .done(function() { $('#logs_buy > ul').prepend('<li>'+name+'<br>Покупка за '+price_buy[1]/100+'$<br>Продажа за '+price_sell[1]/100+'$<br>Процент выгоды: '+max_profit_percent[1]+'%<br>Трейд бан: '+ban_days[1]+' день/дня <br>Дата продажи: '+date+'</li><hr>'); }) .fail(function() { console.log("Ошибка записи логов"); }) } }, error: function (error) { console.log('error; '+error); } }); }, randomInteger(10000, 12000)); } else { var data_logs = [], name = '', date = genDate(); if (quality[i]) name = max_profit_item_name[0]+' '+quality[0]; else name = max_profit_item_name[0]; $.ajax({ url: 'https://progamestak.ru/tradeit/logs.php/', type: 'POST', dataType: 'html', data: { query_type: 'create_logsbuy', id_user: localStorage.getItem('tr_id_user'), name: name, price_buy: price_buy[0]/100, price_sell: price_sell[0]/100, percent: max_profit_percent[0], tradeban: ban_days[0], date: date }, }) .done(function() { $('#logs_buy > ul').prepend('<li>'+name+'<br>Покупка за '+price_buy[0]/100+'$<br>Продажа за '+price_sell[0]/100+'$<br>Процент выгоды: '+max_profit_percent[0]+'%<br>Время трейд бана: '+ban_days[0]+' день/дня <br>Дата продажи: '+date+'</li><hr>'); }) .fail(function() { console.log("Ошибка записи логов"); }) } // end else }, error: function (error) { console.log('error; '+error); } }); // end ajax } } } }, 3000); setTimeout(function() { setTimeout(function() { location.reload(); }, time_to_reload*80000); }, 4000); });