Advertisement
Guest User

Untitled

a guest
Feb 7th, 2016
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.91 KB | None | 0 0
  1. var SteamTotp = require('steam-totp');
  2. var Steam = require('steam');
  3. var SteamTradeOffers = require('steam-tradeoffers');
  4. var request = require("request");
  5. var SteamConfirm = require('steamcommunity-mobile-confirmations');
  6. var mysql = require('mysql');
  7. var io = require('socket.io')(9182);
  8. require('events').EventEmitter.defaultMaxListeners = Infinity;
  9. /*
  10. Konfiguracja skryptu
  11. */
  12. var admin = ''; // SteamID64 administratora
  13. var botsteamid = ''; // SteamID64 bota
  14. var shared_secret = ''; // Shared secret konta bota
  15. var identity_secret = ''; // Identity secret konta bota
  16. var pooling_interval = 10000; // Częstotliwość akceptowania wymian w ms (10000ms to 10s)
  17. var apik = ''; // APIKey Steam konta bota -> http://steamcommunity.com/dev/apikey
  18. var sitename = ''; // Adres strony WWW bez protokołu (np. ygpot.com)
  19. var GameTime = 120; // Czas trwania rundy
  20. var souvenir = 0; // Przedmioty pamiątki (0 - nie, 1 - tak)
  21. var logOnOptions = {
  22. accountName: '', // Login steam do konta bota
  23. password: '', // Hasło steam do konta bota
  24. twoFactorCode: SteamTotp.generateAuthCode(shared_secret) // Generowanie mobilnego tokenu
  25. }
  26. var mysqlInfo = {
  27. host : 'localhost', // Host bazy danych
  28. user : 'root', // Nazwa użytkownika bazy danych
  29. password : '12345', // Hasło do bazy danych
  30. database : 'jackpot', // Nazwa bazy danych
  31. charset : 'utf8_general_ci' // Kodowanie bazy danych
  32. };
  33. /*
  34. Koniec konfiguracji skryptu
  35.  
  36. Edycja poniższego kodu wiąże się z utratą pomocy technicznej na skrypt
  37. */
  38. var mysqlConnection = mysql.createConnection(mysqlInfo, {multipleStatements: true});
  39. var Entities = require('html-entities').AllHtmlEntities;
  40. entities = new Entities();
  41. var steam = new Steam.SteamClient();
  42. var offers = new SteamTradeOffers();
  43. var hash = require('crypto').createHash('sha1');
  44. var express = require("express");
  45. hash.update(Math.random().toString());
  46. hash = hash.digest('hex');
  47. var device_id = 'android:' + hash;
  48. var globalSessionID;
  49. var locked = false, proceeded;
  50. var itemscopy;
  51. var detected = false;
  52. var detected2 = false;
  53. var endtimer = -1;
  54. var authCode = '';
  55. var userCount = 0;
  56.  
  57. io.on('connection', function(socket) {
  58. mysqlConnection.query("SELECT `value` FROM `info` WHERE `name`=\'current_game\'", function(err, row) {
  59. var round = row[0].value;
  60. var lastgame = row[0].value - 1;
  61. mysqlConnection.query("SELECT SUM(value) AS value FROM `game"+lastgame+"`", function(err, row) {
  62. var lastpot = row[0].value;
  63. mysqlConnection.query("SELECT `cost` FROM `games` ORDER BY `cost` DESC", function(err, row) {
  64. if(lastpot == null) {
  65. lastpot = "0.00";
  66. } else {
  67. lastpot = parseFloat(lastpot).toFixed(2);
  68. }
  69. var biggestwin = parseFloat(row[0].cost).toFixed(2);
  70. mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, row, fields) {
  71. var current_game = (row[0].value);
  72. mysqlConnection.query('SELECT `cost`,`itemsnum` FROM `games` WHERE `id`=\''+current_game+'\'', function(err, row, fields) {
  73. var current_bank = parseFloat(row[0].cost).toFixed(2);
  74. var itemsnum = row[0].itemsnum;
  75. socket.emit('gameinfo', { current_money: current_bank, itemsnum: itemsnum });
  76. });
  77. });
  78. socket.emit('info', { round: round, biggestwin: biggestwin, lastpot: lastpot });
  79. });
  80. });
  81. });
  82. socket.on('message', function(data){
  83. mysqlConnection.query("SELECT * FROM users WHERE name = '"+data.login+"'", function(err, row) {
  84. if(row[0].avatar === data.avatar) {
  85. if(row[0].admin === 1) {
  86. var login = '<span style="color: red;">'+data.login+'</span>';
  87. } else if(row[0].admin === 2) {
  88. var login = '<span style="color: green;">'+data.login+'</span>';
  89. } else if(row[0].admin === 3) {
  90. var login = '<span style="color: orange;">[STREAMER] '+data.login+'</span>';
  91. } else {
  92. var login = data.login;
  93. }
  94. } else {
  95. var login = data.login;
  96. }
  97. if(row[0].admin != 4) {
  98. mysqlConnection.query("INSERT INTO chat (login, message, date, avatar) VALUES ('"+login+"', '"+data.message+"', '2016-01-20 14:46:33', '"+data.avatar+"')");
  99. var message = entities.encode(data.message);
  100. io.emit('message', { avatar: data.avatar, login: login, message: message });
  101. }
  102. });
  103. });
  104. mysqlConnection.query('SELECT id FROM chat ORDER BY id DESC', function(err, roww) {
  105. var end = roww[0].id;
  106. var start = end - 15;
  107. if(end <= 15) {
  108. mysqlConnection.query('SELECT * FROM chat ORDER BY id ASC LIMIT 15', function(err, row) {
  109. if(err) {
  110. throw err;
  111. } else {
  112. for(var i in row) {
  113. var message = entities.encode(row[i].message);
  114. io.to(socket.id).emit('message', { avatar: row[i].avatar, login: row[i].login, message: message });
  115. }
  116. }
  117. });
  118. } else {
  119. mysqlConnection.query('SELECT * FROM chat ORDER BY id ASC LIMIT '+start+','+end+'', function(err, row) {
  120. if(err) {
  121. throw err;
  122. } else {
  123. for(var i in row) {
  124. var message = entities.encode(row[i].message);
  125. io.to(socket.id).emit('message', { avatar: row[i].avatar, login: row[i].login, message: message });
  126. }
  127. }
  128. });
  129. }
  130. });
  131. mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, row, fields){
  132. var current_game = (row[0].value);
  133. mysqlConnection.query('SELECT * FROM `game'+current_game+'` ORDER BY `value` DESC', function(err, row) {
  134. if(err) {
  135. throw err;
  136. } else {
  137. for(var i in row) {
  138. io.to(socket.id).emit('item', { userid: row[i].userid, username: row[i].username, item: row[i].item, color: row[i].color, value: row[i].value, avatar: row[i].avatar, image: row[i].image });
  139. }
  140. }
  141. });
  142. });
  143. userCount++;
  144. io.sockets.emit('userCount', { userCount: userCount });
  145. socket.on('disconnect', function() {
  146. userCount--;
  147. io.sockets.emit('userCount', { userCount: userCount });
  148. });
  149. setInterval(function() {
  150. request({
  151. uri: "http://"+sitename+"/game_info.php?info=timeleft",
  152. }, function(error, response, body) {
  153. var timeleft = body;
  154. if(timeleft < 0) {
  155. timeleft = 0;
  156. } else {
  157. io.emit('time', { timeleft: timeleft });
  158. }
  159. });
  160. }, 1000);
  161. });
  162.  
  163. if (require('fs').existsSync('sentry_'+logOnOptions['accountName']+'.hash')) {
  164. logOnOptions['shaSentryfile'] = require('fs').readFileSync('sentry_'+logOnOptions['accountName']+'.hash');
  165. } else if(require('fs').existsSync('ssfn_'+logOnOptions['accountName'])) {
  166. var sha = require('crypto').createHash('sha1');
  167. sha.update(require('fs').readFileSync('ssfn_'+logOnOptions['accountName']));
  168. var sentry = new Buffer(sha.digest(), 'binary');
  169. logOnOptions['shaSentryfile'] = sentry;
  170. require('fs').writeFileSync('sentry_'+logOnOptions['accountName']+'.hash', sentry);
  171. } else if (authCode != '') {
  172. logOnOptions['authCode'] = authCode;
  173. }
  174.  
  175. var recheck = true;
  176. steam.logOn(logOnOptions);
  177.  
  178. function getUserName(steamid) {
  179. getUserInfo(steamid, function(error, data) {
  180. if(error) throw error;
  181. var datadec = JSON.parse(JSON.stringify(data.response));
  182. return (datadec.players[0].personaname);
  183. });
  184. }
  185. function is_float(mixed_var) {
  186. return +mixed_var === mixed_var && (!isFinite(mixed_var) || !! (mixed_var % 1));
  187. }
  188. function proceedWinners() {
  189. var url = 'http://'+sitename+'/inc/winner.php';
  190. request(url, function(error, response, body){});
  191. }
  192. function getUserInfo(steamids,callback) {
  193. var url = 'http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key='+apik+'&steamids='+ steamids + '&format=json';
  194. request({
  195. url: url,
  196. json: true
  197. }, function(error, response, body) {
  198. if(!error && response.statusCode === 200) {
  199. callback(null, body);
  200. } else if (error) {
  201. getUserInfo(steamids,callback);
  202. }
  203. });
  204. }
  205. function addslashes(str) {
  206. str=str.replace(/\\/g,'\\\\');
  207. str=str.replace(/\'/g,'\\\'');
  208. str=str.replace(/\"/g,'\\"');
  209. str=str.replace(/\0/g,'\\0');
  210. return str;
  211. }
  212. function weblogon() {
  213. steam.webLogOn(function(newCookie) {
  214. COOKIE = newCookie;
  215. offers.setup({
  216. sessionID: globalSessionID,
  217. webCookie: newCookie,
  218. APIKey: apik
  219. }, function(err)
  220. {
  221. if(err)
  222. {
  223. console.log(err);
  224. }
  225. var steamapi=apik;
  226. var SteamcommunityMobileConfirmations = require('steamcommunity-mobile-confirmations');
  227. var steamcommunityMobileConfirmations = new SteamcommunityMobileConfirmations(
  228. {
  229. steamid: botsteamid,
  230. identity_secret: identity_secret,
  231. device_id: "android:" + require('crypto').randomBytes(16).toString('hex'),
  232. webCookie: newCookie
  233. });
  234. setInterval(function(){
  235. steamcommunityMobileConfirmations.FetchConfirmations((function (err, confirmations)
  236. {
  237. if (err)
  238. {
  239. console.log(err);
  240. return;
  241. }
  242. if(confirmations.length>0)
  243. {
  244. console.log('[YGWEB] Potwierdzono ' + confirmations.length + ' wymian!');
  245. }
  246. if ( ! confirmations.length)
  247. {
  248. return;
  249. }
  250. steamcommunityMobileConfirmations.AcceptConfirmation(confirmations[0], (function (err, result)
  251. {
  252. if (err) {
  253. console.log(err);
  254. return;
  255. }
  256. }).bind(this));
  257. }).bind(this));
  258. }, pooling_interval);
  259. if (err)
  260. {
  261.  
  262. }
  263. });
  264. });
  265. }
  266. function sendoffers(){
  267. detected2 = false;
  268. offers.loadMyInventory({
  269. appId: 730,
  270. contextId: 2
  271. }, function(err, itemx) {
  272. if(err) {
  273. weblogon();
  274. setTimeout(sendoffers,1000);
  275. return;
  276. }
  277. if(detected2 == true) {
  278. return;
  279. }
  280. detected2 = true;
  281. itemscopy = itemx;
  282. detected = false;
  283. mysqlConnection.query('SELECT * FROM `queue` WHERE `status`=\'active\'', function(err, row, fields) {
  284. if(err) {
  285. return;
  286. }
  287. if(detected == true) {
  288. return;
  289. }
  290. detected = true;
  291. for(var i=0; i < row.length; i++) {
  292. var gameid = row[i].id;
  293. var sendItems = (row[i].items).split('/');
  294. var item=[],num=0;
  295. for (var x = 0; x < itemscopy.length; x++) {
  296. for(var j=0; j < sendItems.length; j++) {
  297. if (itemscopy[x].tradable && (itemscopy[x].market_name).indexOf(sendItems[j]) == 0) {
  298. sendItems[j] = "hgjhgnhgjgnjghjjghjghjghjhgjghjghjghngnty";
  299. itemscopy[x].market_name = "fgdfgdfgdfgdfgfswfewefewrfewrewrewr";
  300. item[num] = {
  301. appid: 730,
  302. contextid: 2,
  303. amount: itemscopy[x].amount,
  304. assetid: itemscopy[x].id
  305. }
  306. num++;
  307. }
  308. }
  309. }
  310. if (num > 0) {
  311. var gamenum = row[i].id;
  312. offers.makeOffer ({
  313. partnerSteamId: row[i].userid,
  314. itemsFromMe: item,
  315. accessToken: row[i].token,
  316. itemsFromThem: [],
  317. message: 'Gratulacje! Oto twoja wygrana z jackpota #'+gamenum+' na stronie '+sitename+''
  318. }, function(err, response){
  319. if (err) {
  320. return;
  321. }
  322. mysqlConnection.query('UPDATE `queue` SET `status`=\'sent '+response+'\' WHERE `id`=\''+gameid+'\'', function(err, row, fields) {});
  323. console.log('Nagroda z rundy '+gamenum+' wyslana do zwycięzcy!');
  324. });
  325. }
  326. }
  327. });
  328. })}
  329. (function() {
  330. /**
  331. * Decimal adjustment of a number.
  332. *
  333. * @param {String} type The type of adjustment.
  334. * @param {Number} value The number.
  335. * @param {Integer} exp The exponent (the 10 logarithm of the adjustment base).
  336. * @returns {Number} The adjusted value.
  337. */
  338. function decimalAdjust(type, value, exp) {
  339. if (typeof exp === 'undefined' || +exp === 0) {
  340. return Math[type](value);
  341. }
  342. value = +value;
  343. exp = +exp;
  344. if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
  345. return NaN;
  346. }
  347. value = value.toString().split('e');
  348. value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
  349. value = value.toString().split('e');
  350. return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
  351. }
  352. if (!Math.round10) {
  353. Math.round10 = function(value, exp) {
  354. return decimalAdjust('round', value, exp);
  355. };
  356. }
  357. if (!Math.floor10) {
  358. Math.floor10 = function(value, exp) {
  359. return decimalAdjust('floor', value, exp);
  360. };
  361. }
  362. if (!Math.ceil10) {
  363. Math.ceil10 = function(value, exp) {
  364. return decimalAdjust('ceil', value, exp);
  365. };
  366. }
  367. })();
  368. function EndGame() {
  369. endtimer = -1;
  370. proceedWinners();
  371. setTimeout(sendoffers,1000);
  372. }
  373. steam.on('loggedOn', function(result) {
  374. console.log('[YGWEB] Zalogowano!');
  375. steam.setPersonaState(Steam.EPersonaState.LookingToTrade);
  376. });
  377. steam.on('webSessionID', function(sessionID) {
  378. globalSessionID = sessionID;
  379. weblogon();
  380. setTimeout(function(){
  381. mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, rows, fields) {
  382. if(err) return;
  383. mysqlConnection.query('SELECT `starttime` FROM `games` WHERE `id`=\''+rows[0].value+'\'', function(errs, rowss, fieldss) {
  384. if(errs) return;
  385. var timeleft;
  386. if(rowss[0].starttime == 2147483647) timeleft = GameTime;
  387. else {
  388. var unixtime = Math.round(new Date().getTime()/1000.0);
  389. timeleft = rowss[0].starttime+GameTime-unixtime;
  390. if(timeleft < 0) timeleft = 0;
  391. }
  392. if(timeleft != GameTime) {
  393. setTimeout(EndGame,timeleft*1000);
  394. endtimer = setTimeout(EndGame,GameTime*1000);
  395. mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, row, fields){
  396. var current_game = (row[0].value);
  397. mysqlConnection.query('UPDATE IGNORE `games` SET `starttime`=UNIX_TIMESTAMP() WHERE `id` = \'' + current_game + '\'', function(err, row, fields) {});
  398. console.log('Przywracamy gre z '+timeleft+' sekund!');
  399. });
  400. }
  401. });
  402. });
  403. },1500);
  404. });
  405. steam.on('friendMsg', function(steamID, message, type) {
  406. if(type != Steam.EChatEntryType.ChatMsg) return;
  407. if(steamID == admin) {
  408. if(message.indexOf("/sendallitems") == 0) {
  409. offers.loadMyInventory({
  410. appId: 730,
  411. contextId: 2
  412. }, function(err, items) {
  413. if(err) {
  414. steam.sendMessage(steamID, 'Próbujemy wysłać przedmioty...');
  415. weblogon();
  416. return;
  417. }
  418. var item=[],num=0;
  419. for (var i = 0; i < items.length; i++) {
  420. if (items[i].tradable) {
  421. item[num] = {
  422. appid: 730,
  423. contextid: 2,
  424. amount: items[i].amount,
  425. assetid: items[i].id
  426. }
  427. num++;
  428. }
  429. }
  430. if (num > 0) {
  431. offers.makeOffer ({
  432. partnerSteamId: steamID,
  433. itemsFromMe: item,
  434. itemsFromThem: [],
  435. message: ''
  436. }, function(err, response){
  437. if (err) {
  438. throw err;
  439. }
  440. steam.sendMessage(steamID, 'Oferta została wysłana z wszystkimi przedmiotami!');
  441. });
  442. }
  443. });
  444. } else if(message.indexOf("/send") == 0) {
  445. var params = message.split(' ');
  446. if(params.length == 1) return steam.sendMessage(steamID, 'Używaj /send [nazwa_przedmiotu]');
  447. offers.loadMyInventory({
  448. appId: 730,
  449. contextId: 2
  450. }, function(err, items) {
  451. if(err) {
  452. steam.sendMessage(steamID, 'Błąd z ładowaniem ekwipunku...');
  453. weblogon();
  454. return;
  455. }
  456. var item=0;
  457. for (var i = 0; i < items.length; i++) {
  458. if((items[i].market_name).indexOf(params[1]) != -1) {
  459. item = items[i].id;
  460. break;
  461. }
  462. }
  463. if (item != 0) {
  464. offers.makeOffer ({
  465. partnerSteamId: steamID,
  466. itemsFromMe: [
  467. {
  468. appid: 730,
  469. contextid: 2,
  470. amount: 1,
  471. assetid: item
  472. }
  473. ],
  474. itemsFromThem: [],
  475. message: ''
  476. }, function(err, response){
  477. if (err) {
  478. throw err;
  479. }
  480. steam.sendMessage(steamID, 'Oferta wysłana z przedmiotem '+item);
  481. });
  482. }
  483. });
  484. } else if(message.indexOf("/end") == 0) {
  485. steam.sendMessage(steamID,'Gra została zakończona!');
  486. if(endtimer != -1) clearTimeout(endtimer);
  487. EndGame();
  488. } else if(message.indexOf("/code") == 0) {
  489. var code = SteamTotp.generateAuthCode(shared_secret);
  490. steam.sendMessage(steamID,'Twój kod do logowania: ' +code+'');
  491. } else if(message.indexOf("/so") == 0) {
  492. steam.sendMessage(steamID,'Nagroday wysylamy natychmiastowo!');
  493. sendoffers();
  494. }
  495. }
  496. });
  497.  
  498. function in_array(needle, haystack, strict) {
  499. var found = false, key, strict = !!strict;
  500.  
  501. for (key in haystack) {
  502. if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
  503. found = true;
  504. break;
  505. }
  506. }
  507.  
  508. return found;
  509. }
  510. function checkoffers(number) {
  511. if (number > 0) {
  512. offers.getOffers({
  513. get_received_offers: 1,
  514. active_only: 1,
  515. get_sent_offers: 0,
  516. get_descriptions: 1,
  517. time_historical_cutoff: Math.round(Date.now() / 1000),
  518. language: "en_us"
  519. }, function(error, body) {
  520. if(error) return;
  521. if(body.response.trade_offers_received){
  522. body.response.trade_offers_received.forEach(function(offer) {
  523. if (offer.trade_offer_state == 2){
  524. if(offer.items_to_give) {
  525. console.log('Anulujemy oferte '+offer.tradeofferid);
  526. offers.declineOffer({tradeOfferId: offer.tradeofferid});
  527. return;
  528. }
  529. if(offer.items_to_receive == undefined) return;
  530. mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'maxitems\'', function(err, row, fields) {
  531. if(offer.items_to_receive.length > row[0].value) {
  532. offers.declineOffer({tradeOfferId: offer.tradeofferid});
  533. offer.items_to_receive = [];
  534. var unixtime = Math.round(new Date().getTime()/1000.0);
  535. console.log('[YGWEB] Oferta #'+offer.tradeofferid+' wyslana przez: '+offer.steamid_other+' anulowana! Zbyt duzo przedmiotow!');
  536. return;
  537. }
  538. });
  539. var delock = false;
  540. offers.loadPartnerInventory({partnerSteamId: offer.steamid_other, appId: 730, contextId: 2, tradeOfferId: offer.tradeofferid, language: "en"}, function(err, hitems) {
  541. if(err) {
  542. weblogon();
  543. recheck = true;
  544. return;
  545. }
  546. if(delock == true) return;
  547. delock = true;
  548. var items = offer.items_to_receive;
  549. var wgg=[],num=0;
  550. for (var i = 0; i < items.length; i++) {
  551. for(var j=0; j < hitems.length; j++) {
  552. if(items[i].assetid == hitems[j].id) {
  553. wgg[num] = hitems[j];
  554. num++;
  555. break;
  556. }
  557. }
  558. }
  559. var price=[];
  560. for(var i=0; i < num; i++) {
  561. if(wgg[i].appid != 730) {
  562. offers.declineOffer({tradeOfferId: offer.tradeofferid});
  563. console.log('errr');
  564. var unixtime = Math.round(new Date().getTime()/1000.0);
  565. return;
  566. }
  567. if(souvenir == 0){
  568. if(wgg[i].market_name.indexOf("Souvenir") != -1) {
  569. var unixtime = Math.round(new Date().getTime()/1000.0);
  570. offers.declineOffer({tradeOfferId: offer.tradeofferid});
  571. console.log('[SERVER] Declined offer #'+offer.tradeofferid+' - Sent by: '+offer.steamid_other+' - Reason: User sent a souvenir skin');
  572. return;
  573. }
  574. }
  575. var itemname = wgg[i].market_name;
  576. var url = 'http://'+sitename+'/inc/cost.php?item='+encodeURIComponent(itemname);
  577. (function(someshit) {
  578. request(url, function(error, response, body){
  579. if(!error && response.statusCode === 200){
  580. var unixtime = Math.round(new Date().getTime()/1000.0);
  581. if(body == "notfound")
  582. {
  583. console.log('[YGWEB] Oferta wyslana przez '+offer.steamid_other+' anulowana! nie mozna pobrac ceny przedmiotow!');
  584. } else {
  585. wgg[someshit].cost = parseFloat(body);
  586. }
  587. } else {
  588. console.log('[YGWEB] Oferta wyslana przez '+offer.steamid_other+' anulowana! nie mozna pobrac ceny przedmiotow!');
  589. offers.declineOffer({tradeOfferId: offer.tradeofferid});
  590. }
  591. });
  592. })(i)
  593. }
  594. setTimeout(function() {
  595. var sum=0;
  596. for(var i=0; i < num; i++) {
  597. sum += wgg[i].cost;
  598. }
  599. mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'minbet\'', function(err, row, fields) {
  600. if(sum < row[0].value) {
  601. num = 0;
  602. var unixtime = Math.round(new Date().getTime()/1000.0);
  603. offers.declineOffer({tradeOfferId: offer.tradeofferid});
  604. return;
  605. console.log('minbet');
  606. }
  607. });
  608.  
  609. var tradelink;
  610. mysqlConnection.query('SELECT tlink FROM `users` WHERE `steamid`=\''+offer.steamid_other+'\'', function(err, row, fields)
  611. {
  612. tradelink= row[0].tlink;
  613. if(!tradelink)
  614. {
  615. var unixtime = Math.round(new Date().getTime()/1000.0);
  616. offers.declineOffer({tradeOfferId: offer.tradeofferid});
  617. console.log('[YGWEB] Oferta wyslana przez '+offer.steamid_other+' anulowana, poniewaz nie uzupelnil on tradelinku!')
  618. return;
  619. }
  620. var token = tradelink.slice(-8);
  621.  
  622. offers.getHoldDuration({partnerSteamId: offer.steamid_other, accessToken: token}, function(err, response){
  623. if (err) {
  624. console.log('[YGWEB] Oferta wyslana przez '+offer.steamid_other+' anulowana, error!')
  625. var unixtime = Math.round(new Date().getTime()/1000.0);
  626. console.log(err);
  627. offers.declineOffer({tradeOfferId: offer.tradeofferid});
  628. return;
  629. }
  630. if(response.their==0)
  631. {
  632. mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, row, fields){
  633. var current_game = (row[0].value);
  634.  
  635. mysqlConnection.query('SELECT COUNT(value) as citems FROM `game'+current_game+'` WHERE `userid`=\''+offer.steamid_other+'\'', function(err, row, fields){
  636. citems = row[0].citems;
  637. citems=citems+offer.items_to_receive.length;
  638. mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'maxitems\'', function(err, row, fields)
  639. {
  640. var mi=row[0].value;
  641. if(citems > mi)
  642. {
  643. offers.declineOffer({tradeOfferId: offer.tradeofferid});
  644. offer.items_to_receive = [];
  645. console.log('[YGWEB] Oferta wyslana przez '+offer.steamid_other+' anulowana, poniewaz wyslal on za duzo skinow!');
  646. return;
  647. }
  648. });
  649. mysqlConnection.query('SELECT SUM(value) as cmoney FROM `game'+current_game+'` WHERE `userid`=\''+offer.steamid_other+'\'', function(err, row, fields)
  650. {
  651. cmoney = row[0].cmoney;
  652. cmoney=cmoney+sum;
  653. for(var k=0; k < num; k++)
  654. {
  655. if(!is_float(wgg[k].cost)){
  656. if(err){
  657. console.log('err float');
  658. }
  659. console.log('float');
  660. offers.declineOffer({tradeOfferId: offer.tradeofferid});
  661. return;
  662. }
  663. }
  664.  
  665.  
  666. getUserInfo(offer.steamid_other, function(error, data){
  667. if(error) throw error;
  668. var datadec = JSON.parse(JSON.stringify(data.response));
  669. var name = addslashes(datadec.players[0].personaname);
  670. var avatar = (datadec.players[0].avatarfull);
  671. if(num == 0) return;
  672. offers.acceptOffer({tradeOfferId: offer.tradeofferid}, function(err, response) {
  673. if(err != null) return;
  674. mysqlConnection.query('SELECT `value` FROM `info` WHERE `name`=\'current_game\'', function(err, row, fields) {
  675. var current_game = (row[0].value);
  676. mysqlConnection.query('SELECT `cost`,`itemsnum` FROM `games` WHERE `id`=\''+current_game+'\'', function(err, row, fields) {
  677. var current_bank = parseFloat(row[0].cost);
  678. var itemsnum = row[0].itemsnum;
  679.  
  680. for(var j=0; j < num; j++) {
  681. var itemn = addslashes(wgg[j].market_name);
  682. mysqlConnection.query('INSERT IGNORE INTO `game' + current_game + '` (`userid`,`username`,`item`,`color`,`value`,`avatar`,`image`,`from`,`to`) VALUES (\'' + offer.steamid_other + '\',\'' + name + '\',\'' + itemn + '\',\'' + wgg[j].name_color + '\',\'' + wgg[j].cost + '\',\'' + avatar + '\',\'' + wgg[j].icon_url + '\',\''+current_bank+'\'+\'0\',\''+current_bank+'\'+\''+wgg[j].cost+'\')', function(err, row, fields) {});
  683. io.emit('item', { userid: offer.steamid_other, username: name, item: itemn, color: wgg[j].name_color, value: wgg[j].cost, avatar: avatar, image: wgg[j].icon_url });
  684. mysqlConnection.query('UPDATE IGNORE `games` SET `itemsnum`=`itemsnum`+1, `cost`=`cost`+\''+wgg[j].cost+'\' WHERE `id` = \'' + current_game + '\'', function(err, row, fields) {});
  685. current_bank = parseFloat(current_bank + wgg[j].cost);
  686. itemsnum++;
  687. }
  688. io.emit('gameinfo', { current_money: current_bank, itemsnum: itemsnum });
  689.  
  690. mysqlConnection.query('SELECT COUNT(DISTINCT userid) AS playersCount FROM `game' + current_game + '`', function(err, rows){
  691. someVar = rows[0].playersCount;
  692. console.log('[YGWEB] Graczy w puli: ' +someVar);
  693. if(someVar == 2 && items.length > 0 && endtimer==-1) {
  694. console.log('[YGWEB] 2 Graczy w puli! Odliczanie rozpoczete!');
  695. endtimer = setTimeout(EndGame,GameTime*1000);
  696. mysqlConnection.query('UPDATE IGNORE `games` SET `starttime`=UNIX_TIMESTAMP() WHERE `id` = \'' + current_game + '\'', function(err, row, fields) {});
  697. }
  698. });
  699. console.log('Zaakceptowano oferte #'+offer.tradeofferid+' wysylajacy '+name+'');
  700. });
  701. });
  702. });
  703. });
  704. });
  705. });
  706. });
  707. } else {
  708. console.log('[YGWEB] Gracz wysylajacy nie posiada aktywowanego ESCROW!');
  709. var unixtime = Math.round(new Date().getTime()/1000.0);
  710. offers.declineOffer({tradeOfferId: offer.tradeofferid});
  711. return;
  712. }
  713. });
  714. });
  715. },3000);
  716. });
  717. }
  718. });
  719. }
  720. });
  721. }
  722. }
  723.  
  724. var pew;
  725. steam.on('tradeOffers', checkoffers);
  726.  
  727. steam.on('sentry', function(data) {
  728. require('fs').writeFileSync('sentry_'+logOnOptions['accountName']+'.hash', data);
  729. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement