Advertisement
Guest User

Untitled

a guest
Dec 16th, 2018
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 118.92 KB | None | 0 0
  1. var fs = require('fs');
  2. var sslOptions = {
  3. key: fs.readFileSync('/etc/letsencrypt/live/vgo4fun.com/privkey.pem'),
  4. cert: fs.readFileSync('/etc/letsencrypt/live/vgo4fun.com/cert.pem'),
  5. requestCert: true,
  6. rejectUnauthorized: false
  7. };
  8. var ExpressTrade = require('expresstrade');
  9. var request = require('request');
  10. var CryptoJS = require("crypto-js");
  11. var log4js = require('log4js');
  12. var https = require('https');
  13. var express = require('express');
  14. var redis = require('redis');
  15. var RandomOrg = require('random-org');
  16. var client = redis.createClient();
  17. var config = require('./config.json');
  18. var app = express();
  19. var redisClient = redis.createClient(),
  20. client = redis.createClient();
  21. var server = https.createServer(sslOptions, app).listen(3001);
  22. var io = require('socket.io')(server);
  23. var logger = log4js.getLogger();
  24. var mysql = require('mysql');
  25.  
  26. var pool;
  27.  
  28. var db_config = {
  29. host: config.options.sql['host'],
  30. user: config.options.sql['username'],
  31. socketPath: '/var/run/mysqld/mysqld.sock',
  32. password: config.options.sql['password'],
  33. queueLimit : 0,
  34. connectionLimit : 0,
  35. database: config.options.sql['database']
  36. };
  37.  
  38. //GAME INFO
  39. var apiKey = config.bots[0].apiKey;
  40. var twoFactor = config.bots[0].twoFactorCode;
  41. var minDep = config.options.minDeposit;
  42. var percentRake = config.options.coinflipComission;
  43.  
  44. var Ownerid = config.options.ownerSteamID;
  45.  
  46. var ET = new ExpressTrade({
  47. apikey: apiKey,
  48. twofactorsecret: twoFactor,
  49. pollInterval: config.options.poolingInterval
  50. });
  51.  
  52. const redisChannels = {
  53. jackpotUsers: 'jackpot.users'
  54. }
  55.  
  56. var inventoryTimer = {};
  57. var socketBySteam = {};
  58.  
  59. var loadGames = [];
  60. var timerGame = {};
  61. var timer11Game = {};
  62.  
  63.  
  64.  
  65. var antiFlood = {};
  66. var timesFlooding = {};
  67.  
  68. var inventoryUser = {};
  69.  
  70. //CHAT FUNCTIONS
  71. var chatMessages = [];
  72. var usersOnline = {};
  73. var antiSpamChat = {};
  74. //CHAT FUNCTIONS
  75.  
  76. var connection = 0;
  77.  
  78. //JACKPOT'
  79. var closejackpotbets = 0;
  80. var usersPot = [];
  81. var jackpotID;
  82. var usersInPot = 0;
  83. var jackpotHash = "";
  84. var jackpotSecret = "";
  85. var jackpotRound = -1;
  86. var jackpotState = 'NONE';
  87. var jackpotTickets = 0;
  88. var jackpotTotalTickets = [];
  89. var totalJackpotItems = 0;
  90. var totalJackpotValue = 0;
  91. var totalSecondsJackpot = 0;
  92. var usersPrices = {};
  93. var checkJackpotEnd;
  94. var jackpotPRake = config.options.jackpotComission;
  95. var pickWinner = false;
  96. var pickSteamID = '';
  97.  
  98. log4js.configure({
  99. appenders: {
  100. cheese: {
  101. type: 'file',
  102. filename: 'logs/logs.log'
  103. }
  104. },
  105. categories: {
  106. default: {
  107. appenders: ['cheese'],
  108. level: 'error'
  109. }
  110. }
  111. });
  112.  
  113. handleDisconnect();
  114.  
  115. function nextJackpotRound()
  116. {
  117. pickWinner = false;
  118. pickSteamID = '';
  119. pool.query("SELECT * FROM jgames ORDER BY id DESC limit 1", function (err, result1, fields) {
  120. if(result1.length == 1) {
  121. if(result1[0].ended != 0) {
  122. jackpotID = result1[0].id + 1;
  123. pool.query("SELECT * FROM jbets WHERE jid = " + jackpotID + "", function (err, result, fields) {
  124. usersInPot = result.length;
  125. });
  126. console.log('Current jackpot game: ' + jackpotID);
  127. } else {
  128. jackpotID = result1[0].id;
  129. pool.query("SELECT * FROM jbets WHERE jid = " + jackpotID + "", function (err, result, fields) {
  130. usersInPot = result.length;
  131. });
  132. console.log('Current jackpot game: ' + jackpotID);
  133. }
  134. } else {
  135.  
  136. }
  137. });
  138.  
  139. var secret = makeSecret();
  140. var hash = makeHash();
  141.  
  142. pool.query("SELECT * FROM jgames ORDER BY id DESC limit 1", function (err, result1, fields) {
  143. if(result1[0] == null || result1[0].ended != 0) {
  144. pool.query('INSERT INTO jgames SET hash = ' + pool.escape(hash) + ', secret = ' + pool.escape(secret) + ', pot = 0.00, items = 0, tickets = 0', function(er, ro) {
  145. if(er) throw er;
  146. jackpotRound = ro.insertId;
  147. jackpotState = 'WAITING';
  148. jackpotHash = hash;
  149. jackpotSecret = secret;
  150.  
  151. jackpotTotalTickets = [];
  152. jackpotTickets = 0;
  153. totalJackpotItems = 0;
  154. totalJackpotValue = 0;
  155. totalSecondsJackpot = 0;
  156. usersPrices = {};
  157. closejackpotbets = 0;
  158. io.sockets.emit('message', {
  159. type: 'newJackpotRound',
  160. id: jackpotID
  161. });
  162. });
  163. } else {
  164. pool.query("SELECT * FROM jbets WHERE jid = "+ result1[0].id +"", function (err, result, fields) {
  165. var items = [];
  166. result.forEach(function(value) {
  167. usersPot.push({
  168. userid: value.user
  169. });
  170. for(var i = value.minTicket; i < value.maxTicket; i++){
  171. jackpotTotalTickets.push({
  172. 'user': value.user,
  173. 'ticket': i
  174. });
  175. }
  176. items.push({
  177. user: value.user,
  178. ids: value.assetids
  179. });
  180. usersPrices[value.user] = 0;
  181. });
  182. closejackpotbets = 0;
  183. ET.IUser.GetInventory({sort: 6, per_page: 500, page: 1}, (err, body) => {
  184. if(err != null || body.status != 1) {
  185. logger.error(body);
  186. return;
  187. }
  188. var res = body.response.items;
  189. items.forEach(function(itemz) {
  190. var itemsData = [];
  191. var totalValue = 0;
  192. res.forEach(function(item) {
  193. var ids = itemz.ids.split(',');
  194. ids.forEach(function (itemy) {
  195. if (item.id == itemy) {
  196. itemsData.push({
  197. 'id': item.id,
  198. 'price': item.suggested_price / 100,
  199. 'name': item.name,
  200. 'icon_url': item.image['300px'],
  201. 'color': item.color
  202. });
  203. totalValue += item.suggested_price / 100;
  204. }
  205. });
  206. });
  207. pool.query('SELECT tradelink,name,avatar,level FROM users WHERE steamid = ' + itemz.user, function (error, resultsnew) {
  208. io.sockets.emit('message', {
  209. type: 'addJackpotBet',
  210. userInfo: {
  211. avatar: resultsnew[0].avatar,
  212. name: resultsnew[0].name,
  213. steamid: itemz.user,
  214. level: resultsnew[0].level
  215. },
  216. itemsInfo: itemsData,
  217. sound: 1
  218. });
  219. });
  220. usersPrices[itemz.user] += totalValue;
  221. });
  222. });
  223. redisClient.llen(redisChannels.jackpotUsers, function (err, length) {
  224. for(var i = 0; i < length; i++){
  225. redisClient.lindex(redisChannels.jackpotUsers, i, function (err, response) {
  226. var fixing = JSON.parse(response);
  227. var value = 0;
  228. fixing.itemsInfo.forEach(function(z) {
  229. value += parseFloat(z.price);
  230. });
  231. var chance = 100 - ((totalJackpotValue-value)/totalJackpotValue)*100;
  232. usersPrices[fixing.userInfo.steamid] = value;
  233.  
  234. if(connection > 0 && io.sockets.connected[socketBySteam[fixing.userInfo.steamid]['info']])
  235. {
  236. io.sockets.connected[socketBySteam[fixing.userInfo.steamid]['info']].emit('message', {
  237. type: 'standingQueue',
  238. yourChance: chance
  239. });
  240. }
  241. });
  242. }
  243. });
  244. jackpotRound = result1[0].id;
  245. if(usersPot.length > 0) {
  246. jackpotState = 'BETTING';
  247. } else {
  248. jackpotState = 'WAITING';
  249. }
  250. jackpotHash = result1[0].hash;
  251. jackpotSecret = result1[0].secret;
  252.  
  253. result.forEach(function(infos) {
  254. totalJackpotValue += infos.value;
  255. totalJackpotItems += infos.total;
  256. jackpotTickets += infos.maxTicket;
  257. });
  258. io.sockets.emit('message', {
  259. type: 'returnJackpotRound',
  260. hash: result1[0].hash,
  261. totalPrice: totalJackpotValue,
  262. totalItems: totalJackpotItems
  263. });
  264. if(usersPot.length == 2) {
  265. totalSecondsJackpot = time()+90;
  266. checkJackpotEnd = setInterval(function() {
  267. if(totalSecondsJackpot-time() <= 0)
  268. {
  269. redisClient.llen(redisChannels.jackpotUsers, function (err, length) {
  270. for(var i = 0; i < length; i++){
  271. redisClient.lindex(redisChannels.jackpotUsers, i, function (err, response) {
  272. redisClient.lrem(redisChannels.jackpotUsers, i, response);
  273. });
  274. }
  275. });
  276. jackpotState = 'PICKING_WINNER';
  277. setTimeout(function() { pickJackpotWinner(); }, 1000);
  278. clearInterval(checkJackpotEnd);
  279. }
  280. }, 1000);
  281. }
  282. setTimeout(function(){
  283. io.sockets.emit('message', {
  284. type: 'jackpotReturn',
  285. totalUsers: usersInPot,
  286. potItemsValue: totalJackpotValue,
  287. potValue: totalJackpotItems,
  288. timpul: totalSecondsJackpot-time()
  289. });
  290. }, 1000);
  291. });
  292. }
  293. });
  294. }
  295.  
  296. function getUserDetail(steamid, type, callback) {
  297. pool.query('SELECT * FROM users WHERE steamid = ' + steamid, function (error, result) {
  298. var body = JSON.stringify(result[0]);
  299. var novo = JSON.parse(body);
  300. if(type == 'Avatar') {
  301. callback(novo.avatar);
  302. } else if(type == 'Name') {
  303. callback(novo.name);
  304. } else {
  305. callback('ERROR');
  306. }
  307. });
  308. }
  309.  
  310. var processOffer = function(offer) {
  311. pool.query('SELECT action,user FROM trades WHERE tid = ' + pool.escape(offer.id), function(caca, maca) {
  312. if(caca) throw caca;
  313. if(maca.length == 0) return;
  314. var offeritems = offer.recipient.items;
  315. var offer_name = maca[0].action;
  316. if(offer.state == 7 || offer.state == 6 || offer.state == 8 || offer.state == 5) {
  317. if(offer_name == 'CFJoin') {
  318. pool.query('UPDATE games SET `psteamid` = "", `pname` = "", `pavatar` = "", `pskinsurl` = "", `pskinsnames` = "", `pskinsprices` = "", `pcolors` = "", `pskins` = "", `ptp` = "", `trade_token` = "" WHERE `trade_token` = ' + pool.escape(offer.id), function(err2, res2) {
  319. if(err2) throw err2;
  320. setTimeout(function() {
  321. loadAllGames();
  322. sendGames(res2[0].id);
  323. }, 1000);
  324. });
  325. pool.query('UPDATE trades SET status = ' + pool.escape('Cancelled') + ' WHERE tid = ' + pool.escape(offer.id));
  326. if(connection > 0 && io.sockets.connected[socketBySteam[maca[0].user]['info']])
  327. {
  328. io.sockets.connected[socketBySteam[maca[0].user]['info']].emit('message', {
  329. type: 'modals',
  330. tip: 'trade',
  331. result: 'offerDeclined'
  332. });
  333. }
  334. } else if(offer_name == 'CFCreate') {
  335. pool.query('UPDATE trades SET status = ' + pool.escape('Cancelled') + ' WHERE tid = ' + pool.escape(offer.id));
  336. if(connection > 0 && io.sockets.connected[socketBySteam[maca[0].user]['info']])
  337. {
  338. io.sockets.connected[socketBySteam[maca[0].user]['info']].emit('message', {
  339. type: 'modals',
  340. tip: 'trade',
  341. result: 'offerDeclined'
  342. });
  343. }
  344. } else if(offer_name == 'Winning') {
  345. pool.query('SELECT user FROM trades WHERE tid = ' + pool.escape(offer.id), function(caca, maca) {
  346. if(caca) throw caca;
  347. if(maca.length == 0) return;
  348. pool.query('UPDATE trades SET status = ' + pool.escape('Cancelled') + ' WHERE tid = ' + pool.escape(offer.id));
  349. });
  350. if(connection > 0 && io.sockets.connected[socketBySteam[maca[0].user]['info']])
  351. {
  352. io.sockets.connected[socketBySteam[maca[0].user]['info']].emit('message', {
  353. type: 'modals',
  354. tip: 'trade',
  355. result: 'offerDeclined'
  356. });
  357. }
  358. } else if(offer_name == 'ShopPrize') {
  359. pool.query('SELECT user FROM trades WHERE tid = ' + pool.escape(offer.id), function(imp, rows) {
  360. if(imp) throw imp;
  361. if(rows.length == 0) return;
  362. pool.query('UPDATE trades SET status = ' + pool.escape('Cancelled') + ' WHERE tid = ' + pool.escape(offer.id));
  363. });
  364. if(connection > 0 && io.sockets.connected[socketBySteam[maca[0].user]['info']])
  365. {
  366. io.sockets.connected[socketBySteam[maca[0].user]['info']].emit('message', {
  367. type: 'modals',
  368. tip: 'trade',
  369. result: 'offerDeclined'
  370. });
  371. }
  372. } else if(offer_name == 'Jackpot') {
  373. pool.query('UPDATE trades SET status = ' + pool.escape('Cancelled') + ' WHERE tid = ' + pool.escape(offer.id));
  374.  
  375. if(connection > 0 && io.sockets.connected[socketBySteam[maca[0].user]['info']])
  376. {
  377. io.sockets.connected[socketBySteam[maca[0].user]['info']].emit('message', {
  378. type: 'modals',
  379. tip: 'trade',
  380. result: 'offerDeclined'
  381. });
  382. }
  383. }
  384. } else if(offer.state == 3){
  385. if(offer_name == 'CFCreate')
  386. {
  387. var receivedItems = [];
  388. var assetiddsss = [];
  389. offeritems.forEach(function(i) {
  390. receivedItems.push(i);
  391. assetiddsss.push(i.id);
  392. });
  393. var totalSkins = 0;
  394. var skinImages = [];
  395. var skinNames = [];
  396. var skinPrices = [];
  397. var skinColors = [];
  398. var totalPrice = 0;
  399.  
  400. for(var i in receivedItems)
  401. {
  402. totalSkins++;
  403. totalPrice += receivedItems[i].suggested_price / 100;
  404. skinImages.push(receivedItems[i].image['300px']);
  405. skinNames.push(receivedItems[i].name);
  406. skinPrices.push(receivedItems[i].suggested_price / 100);
  407. skinColors.push(receivedItems[i].color);
  408. }
  409.  
  410. //SMECHERIE
  411. var Skinimages = "";
  412. var Skinnames = "";
  413. var Skinprices = "";
  414. Skinimages = skinImages.join(',');
  415. Skinnames = skinNames.join(',');
  416. Skinprices = skinPrices.join(',');
  417.  
  418. var timp = new Date();
  419. var timpCalc = timp.getTime()/1000;
  420.  
  421. var name;
  422. var avatar;
  423.  
  424. pool.query('SELECT tradelink,name,avatar FROM users WHERE steamid = ' + pool.escape(maca[0].user), function(error, results) {
  425. if(error) throw error;
  426.  
  427. //GENERATE a SECRET
  428. var hashul = createHash();
  429.  
  430. function createHash() {
  431. var text = "";
  432. var possible = "0123456789";
  433.  
  434. for(var i=0; i < 16; i++)
  435. text += possible.charAt(Math.floor(Math.random() * possible.length));
  436.  
  437. return text;
  438. }
  439.  
  440. pool.query('UPDATE users SET xp = xp + ' + pool.escape(totalPrice*100) + ' WHERE steamid = ' + pool.escape(maca[0].user), function(haha, huhu) {
  441. if(haha) throw haha;
  442. if(huhu.length == 0) return;
  443.  
  444. LevelCalculate(maca[0].user);
  445. });
  446.  
  447. pool.query('UPDATE trades SET status = ' + pool.escape('Accepted') + ' WHERE tid = ' + pool.escape(offer.id));
  448.  
  449. pool.query('INSERT INTO games SET cassetids = ' + pool.escape(assetiddsss.join(',')) + ', csteamid = ' + pool.escape(maca[0].user) + ', cname = ' + pool.escape(results[0].name) + ', cavatar = ' + pool.escape(results[0].avatar) + ', cskinsurl = ' + pool.escape(Skinimages) + ', cskinsnames = ' + pool.escape(Skinnames) + ', cskinsprices = ' + pool.escape(Skinprices) + ', cskins = ' + pool.escape(totalSkins) + ', ccolors = '+ pool.escape(skinColors.join(',')) + ', ctp = ' + pool.escape(totalPrice) + ', tcreated = ' + pool.escape(timpCalc) + ', hash = ' + pool.escape(hashul), function(arr, ass) {
  450. if(arr) throw arr;
  451.  
  452. pool.query('SELECT MAX(id) AS cacat FROM games', function(cacas, rara) {
  453. if(cacas) throw cacas;
  454.  
  455. loadAllGames();
  456. loadStatistics();
  457. setTimeout(function() {
  458. loadGames.forEach(function(itm) {
  459. if(itm.id == rara[0].cacat)
  460. {
  461. io.sockets.emit('message', {
  462. type: 'addGame',
  463. games: {
  464. 'id': itm.id,
  465. 'csteamid': itm.csteamid,
  466. 'cname': itm.cname,
  467. 'cavatar': itm.cavatar,
  468. 'cskinsurl': itm.cskinsurl,
  469. 'cskinsnames': itm.cskinsnames,
  470. 'cskinsprices': itm.cskinsprices,
  471. 'cskins': itm.cskins,
  472. 'ccolors': itm.ccolors,
  473. 'ctp': itm.ctp,
  474. 'psteamid': itm.psteamid,
  475. 'pcolors': itm.pcolors,
  476. 'pname': itm.pname,
  477. 'pavatar': itm.pavatar,
  478. 'pskinsurl': itm.pskinsurl,
  479. 'pskinsnames': itm.pskinsnames,
  480. 'pskinsprices': itm.pskinsprices,
  481. 'pskins': itm.pskins,
  482. 'ptp': itm.ptp,
  483. 'hash': itm.hash,
  484. 'secret': itm.secret,
  485. 'winner': itm.winner,
  486. 'timer': timerGame[itm.id]-time(),
  487. 'timer11': itm.timer11,
  488. 'ttimer11': timer11Game[itm.id]-time()
  489. }
  490. });
  491. }
  492. });
  493. }, 1200);
  494. });
  495. });
  496. });
  497. if(connection > 0 && io.sockets.connected[socketBySteam[maca[0].user]['info']])
  498. {
  499. io.sockets.connected[socketBySteam[maca[0].user]['info']].emit('message', {
  500. type: 'modals',
  501. tip: 'trade',
  502. result: 'offerAccepted'
  503. });
  504. }
  505. }
  506. else if(offer_name == 'CFJoin')
  507. {
  508. pool.query('SELECT pskinsnames,secret,hash,id,ctp,ptp,psteamid FROM games WHERE trade_token = ' + pool.escape(offer.id), function(err, res) {
  509. if(err) throw err;
  510.  
  511. if(!res[0])
  512. {
  513. cancelOffer(offer.id);
  514. return;
  515. }
  516.  
  517. var receivedItems = [];
  518. offeritems.forEach(function(itm) {
  519. receivedItems.push(itm.id);
  520. });
  521.  
  522. pool.query('UPDATE games SET passetids = ' + pool.escape(receivedItems.join(',')) + ' WHERE trade_token = ' + pool.escape(offer.id), function(caca, maca) {
  523. if(caca) throw caca;
  524. if(maca.length == 0) return;
  525. });
  526.  
  527. //GENERATE a SECRET
  528. var winner;
  529. var secret = createSecret();
  530. var forWinner = (Math.random() * ((res[0].ctp + res[0].ptp) - 0.01) + 0.01).toFixed(2);
  531.  
  532. if(forWinner >= 0.01 && forWinner <= res[0].ctp)
  533. {
  534. winner = 1;
  535. logger.info(forWinner + ' winner 1');
  536. }
  537. else if(forWinner >= (res[0].ctp + 0.01) && forWinner <= (res[0].ctp + res[0].ptp))
  538. {
  539. winner = 2;
  540. logger.info(forWinner + ' winner 2');
  541. }
  542. var secret = createSecret();
  543. function createSecret() {
  544. var text = "";
  545. var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_/()|";
  546.  
  547. for(var i=0; i < 8; i++)
  548. text += possible.charAt(Math.floor(Math.random() * possible.length));
  549.  
  550. return text;
  551. }
  552. var hashul = res[0].hash;
  553.  
  554. var secretsihash = secret.concat(hashul);
  555. pool.query('UPDATE games SET timer11 = 1, secret = ' + pool.escape(secret) + ', ticketWon = ' + pool.escape(forWinner*100) + ', ticketsTotal = ' + pool.escape(parseFloat(res[0].ctp+res[0].ptp)*100) + ' WHERE trade_token = ' + pool.escape(offer.id), function(aaa, bbb) {
  556. if(aaa) throw aaa;
  557.  
  558. pool.query('UPDATE users SET xp = xp + ' + pool.escape(res[0].ptp*100) + ' WHERE steamid = ' + pool.escape(res[0].psteamid), function(haha, huhu) {
  559. if(haha) throw haha;
  560. if(huhu.length == 0) return;
  561.  
  562. LevelCalculate(res[0].psteamid);
  563. });
  564.  
  565. loadAllGames();
  566. sendGames(res[0].id);
  567. });
  568. pool.query('UPDATE trades SET status = ' + pool.escape('Accepted') + ' WHERE tid = ' + pool.escape(offer.id));
  569.  
  570. timer11Game[res[0].id] = time()+10;
  571. setTimeout(function() {
  572. pool.query('UPDATE games SET winner = ' + pool.escape(winner) + ' WHERE trade_token = ' + pool.escape(offer.id), function(errr, ress) {
  573. if(errr) throw errr;
  574.  
  575. if(winner == 1)
  576. {
  577. pool.query('SELECT csteamid AS steamid FROM games WHERE trade_token = ' + pool.escape(offer.id), function(arr, ass) {
  578. if(arr) throw arr;
  579.  
  580. pool.query('SELECT tradelink FROM users WHERE steamid = ' + pool.escape(ass[0].steamid), function(arr2, ass2) {
  581. if(arr2) throw arr2;
  582. sendItemsTrade(offer, ass2[0].tradelink, winner);
  583. });
  584. });
  585. }
  586. else if(winner == 2)
  587. {
  588.  
  589.  
  590. }
  591. });
  592. }, 9500);
  593. if(io.sockets.connected[socketBySteam[maca[0].user]['info']])
  594. {
  595. io.sockets.connected[socketBySteam[maca[0].user]['info']].emit('message', {
  596. type: 'modals',
  597. tip: 'trade',
  598. result: 'offerAccepted'
  599. });
  600. }
  601. });
  602. }
  603. else if(offer_name == 'Jackpot')
  604. {
  605. var timer = 10;
  606. if(closejackpotbets == 1) timer = 35000;
  607. setTimeout(function() {
  608. var receivedItems = [];
  609. usersPot.push({
  610. userid: maca[0].user
  611. });
  612. var items = [];
  613. var useritems = offer.recipient.items;
  614. useritems.forEach(function(item) {
  615. items.push(item);
  616. receivedItems.push(item.id);
  617. });
  618. if(jackpotState != 'PICKING_WINNER')
  619. {
  620. jackpotState = 'BETTING';
  621. }
  622. else if(jackpotState == 'PICKING_WINNER')
  623. {
  624. jackpotID++;
  625. }
  626. var itemsData = [];
  627. var totalSkins = 0;
  628. var skinImages = [];
  629. var skinNames = [];
  630. var skinPrices = [];
  631. var totalPrice = 0;
  632.  
  633. for(var i in items)
  634. {
  635. totalSkins++;
  636. totalPrice += items[i].suggested_price / 100;
  637. skinImages.push(items[i].image['300px']);
  638. skinNames.push(items[i].name);
  639. skinPrices.push(items[i].suggested_price / 100);
  640.  
  641. itemsData.push({
  642. 'id': items[i].id,
  643. 'price': items[i].suggested_price / 100,
  644. 'name': items[i].name,
  645. 'icon_url': items[i].image['300px'],
  646. 'color': items[i].color
  647. });
  648. }
  649. pool.query('UPDATE jgames SET pot = pot + ' + pool.escape(totalPrice) + ' WHERE id = ' + jackpotID);
  650. var Skinimages = "";
  651. var Skinnames = "";
  652. var Skinprices = "";
  653. Skinimages = skinImages.join(',');
  654. Skinnames = skinNames.join(',');
  655. Skinprices = skinPrices.join(',');
  656.  
  657. var assetidsSS = receivedItems.join(',');
  658.  
  659. var timp = new Date();
  660. var timpCalc = timp.getTime()/1000;
  661.  
  662. var name;
  663. var avatar;
  664.  
  665. totalJackpotItems += totalSkins;
  666. totalJackpotValue += totalPrice;
  667.  
  668. var minTicket = jackpotTickets+1;
  669. var maxTicket = minTicket+(totalPrice*100);
  670. for(var i = minTicket; i < maxTicket; i++)
  671. {
  672. jackpotTotalTickets.push({
  673. 'user': offer.recipient.steam_id,
  674. 'ticket': i
  675. });
  676. }
  677. jackpotTickets += totalPrice*100;
  678. pool.query('SELECT tradelink,name,avatar,level FROM users WHERE steamid = ' + pool.escape(offer.recipient.steam_id), function(error, results) {
  679. if(error) throw error;
  680.  
  681. var jUser = [];
  682.  
  683. jUser.push({
  684. 'userInfo': {
  685. 'avatar': results[0].avatar,
  686. 'name': results[0].name,
  687. 'steamid': offer.recipient.steam_id,
  688. 'level': results[0].level
  689. },
  690. 'itemsInfo': itemsData
  691. });
  692.  
  693. redisClient.rpush(redisChannels.jackpotUsers, JSON.stringify(jUser[0]));
  694. pool.query('UPDATE users SET xp = xp + ' + pool.escape(totalPrice*100) + ' WHERE steamid = ' + pool.escape(offer.recipient.steam_id), function(haha, huhu) {
  695. if(haha) throw haha;
  696. if(huhu.length == 0) return;
  697.  
  698. LevelCalculate(offer.recipient.steam_id);
  699. });
  700. pool.query("SELECT * FROM jbets WHERE jid = " + jackpotID + "", function (err, result, fields) {
  701. usersInPot = result.length+1;
  702. if(usersInPot == 2)
  703. {
  704. totalSecondsJackpot = time()+90;
  705. checkJackpotEnd = setInterval(function() {
  706. if(totalSecondsJackpot-time() <= 0)
  707. {
  708. redisClient.llen(redisChannels.jackpotUsers, function (err, length) {
  709. for(var i = 0; i < length; i++){
  710. redisClient.lindex(redisChannels.jackpotUsers, i, function (err, response) {
  711. redisClient.lrem(redisChannels.jackpotUsers, i, response);
  712. });
  713. }
  714. });
  715. jackpotState = 'PICKING_WINNER';
  716. setTimeout(function() { pickJackpotWinner(); }, 1000);
  717. clearInterval(checkJackpotEnd);
  718. closejackpotbets = 1;
  719. } else if(totalSecondsJackpot-time() <= 5) {
  720. closejackpotbets = 1;
  721. }
  722.  
  723. }, 1000);
  724. }
  725. setTimeout(function() {
  726. io.sockets.emit('message', {
  727. type: 'jackpotSet',
  728. totalUsers: usersInPot,
  729. potItemsValue: totalJackpotValue,
  730. potValue: totalJackpotItems,
  731. timpul: totalSecondsJackpot-time()
  732. });
  733. }, 10);
  734. });
  735. pool.query('INSERT INTO jbets SET user = ' + pool.escape(offer.recipient.steam_id) + ', assetids = ' + pool.escape(assetidsSS) + ', value = ' + pool.escape(totalPrice) + ', minTicket = ' + pool.escape(minTicket) + ', maxTicket = ' + pool.escape(maxTicket) + ', total = ' + pool.escape(totalSkins) + ', jid = ' + pool.escape(jackpotID) + ', token = ' + pool.escape(offer.id));
  736.  
  737. pool.query('UPDATE trades SET status = ' + pool.escape('Accepted') + ' WHERE tid = ' + pool.escape(offer.id));
  738.  
  739. io.sockets.emit('message', {
  740. type: 'addJackpotBet',
  741. userInfo: {
  742. avatar: results[0].avatar,
  743. name: results[0].name,
  744. steamid: offer.recipient.steam_id,
  745. level: results[0].level
  746. },
  747. itemsInfo: itemsData,
  748. sound: 1
  749. });
  750. pool.query("SELECT * FROM jbets WHERE jid = " + jackpotID + "", function (err, allbets, fields) {
  751. var blockids = [];
  752. allbets.forEach(function(bet) {
  753. var blocked = 0;
  754. blockids.forEach(function(newid) {
  755. if(newid == bet.user) {
  756. blocked = 1;
  757. }
  758. });
  759. if(blocked != 1) {
  760. var value = 0;
  761. allbets.forEach(function(bet2) {
  762. if(bet.user == bet2.user) {
  763. value += bet2.value;
  764. }
  765. });
  766. var chance = 100 - ((totalJackpotValue-value)/totalJackpotValue)*100;
  767. usersPrices[bet.user] = value;
  768.  
  769. if(connection > 0 && io.sockets.connected[socketBySteam[bet.user]['info']])
  770. {
  771. io.sockets.connected[socketBySteam[bet.user]['info']].emit('message', {
  772. type: 'standingQueue',
  773. yourChance: chance
  774. });
  775. }
  776. blockids.push(bet.user);
  777. }
  778. });
  779. });
  780. redisClient.llen(redisChannels.jackpotUsers, function (err, length) {
  781. for(var i = 0; i < length; i++){
  782. redisClient.lindex(redisChannels.jackpotUsers, i, function (err, response) {
  783. var body = JSON.parse(response);
  784. var value = 0;
  785. body.itemsInfo.forEach(function(z) {
  786. value += parseFloat(z.price);
  787. });
  788. var chance = 100 - ((totalJackpotValue-value)/totalJackpotValue)*100;
  789. usersPrices[body.userInfo.steamid] = value;
  790.  
  791. if(connection > 0 && io.sockets.connected[socketBySteam[body.userInfo.steamid]['info']])
  792. {
  793. io.sockets.connected[socketBySteam[body.userInfo.steamid]['info']].emit('message', {
  794. type: 'standingQueue',
  795. totalItems: length,
  796. yourChance: chance
  797. });
  798. }
  799. });
  800. }
  801. if(connection > 0 && io.sockets.connected[socketBySteam[maca[0].user]['info']])
  802. {
  803. io.sockets.connected[socketBySteam[maca[0].user]['info']].emit('message', {
  804. type: 'modals',
  805. tip: 'trade',
  806. result: 'offerAccepted'
  807. });
  808. }
  809. });
  810. });
  811. return;
  812. }, timer);
  813.  
  814. } else if(offer_name == 'Winning') {
  815. pool.query('UPDATE trades SET status = ' + pool.escape('Accepted') + ' WHERE tid = ' + pool.escape(offer.id));
  816. } else if(offer_name == 'ShopPrize') {
  817. pool.query('UPDATE trades SET status = ' + pool.escape('Accepted') + ' WHERE tid = ' + pool.escape(offer.id));
  818. }
  819. }
  820. });
  821. }
  822.  
  823. process.on('uncaughtException', function(err) {
  824. logger.error(err);
  825. });
  826.  
  827. nextJackpotRound();
  828. loadAllGames();
  829. ET.on('any', (_event, offer) => {
  830. if(_event == "offerExpired" || _event == "offerCancelled" || _event == "offerDeclined" || _event == "offerAccepted" || _event == "offerNoLongerValid") {
  831. processOffer(offer);
  832. } else if(_event == "offerReceived") {
  833. if(offer.message == config.options.shopMessage && offer.is_gift == true) {
  834. console.log('Accepting Shop Items');
  835. var items = offer.sender.items;
  836. ET.ITrade.AcceptOffer({offer_id: offer.id}, (err, body) => {
  837. if(err != null || body.status != 1) {
  838. console.log("Error on accept shop offer!");
  839. logger.error(body + " <- Body || Error -> " + err);
  840. } else {
  841. items.forEach(function(item) {
  842. pool.query('INSERT INTO `shop` SET `classid` = ' + pool.escape(item.id) + ', `name` = ' + pool.escape(item.name) + ', `price` = ' + pool.escape(item.suggested_price) + ', `img` = ' + pool.escape(item.image['300px']) + ', `color` = ' + pool.escape(item.color) + '');
  843. });
  844. }
  845. });
  846. } else {
  847. ET.ITrade.CancelOffer({offer_id: offer.id});
  848. }
  849. }
  850. });
  851.  
  852. var cancelOffer = function (offerid) {
  853. ET.ITrade.GetOffer({offer_id: offerid}, (err, body) => {
  854. if(err != null || body.status != 1) {
  855. logger.error(body);
  856. cancelOffer(offerid);
  857. return;
  858. }
  859. var offer = body.response.offer;
  860. if(offer.state == 2) {
  861. ET.ITrade.CancelOffer({offer_id: offer.id});
  862. console.log('Cancelling OFFER');
  863. }
  864. });
  865. }
  866.  
  867.  
  868. function loadAllGames()
  869. {
  870. pool.query('SELECT * FROM games WHERE `ended` = 0', function(err, res, fields) {
  871. if(err) throw err;
  872.  
  873. loadGames = [];
  874.  
  875. for(var i in res)
  876. {
  877. loadGames.push({
  878. 'id': res[i].id,
  879. 'csteamid': res[i].csteamid,
  880. 'cname': res[i].cname,
  881. 'cavatar': res[i].cavatar,
  882. 'cskinsurl': res[i].cskinsurl,
  883. 'cskinsnames': res[i].cskinsnames,
  884. 'cskinsprices': res[i].cskinsprices,
  885. 'cskins': res[i].cskins,
  886. 'ccolors': res[i].ccolors,
  887. 'ctp': res[i].ctp,
  888. 'psteamid': res[i].psteamid,
  889. 'pname': res[i].pname,
  890. 'pavatar': res[i].pavatar,
  891. 'pskinsurl': res[i].pskinsurl,
  892. 'pskinsnames': res[i].pskinsnames,
  893. 'pskinsprices': res[i].pskinsprices,
  894. 'pskins': res[i].pskins,
  895. 'pcolors': res[i].pcolors,
  896. 'ptp': res[i].ptp,
  897. 'hash': res[i].hash,
  898. 'secret': res[i].secret,
  899. 'winner': res[i].winner,
  900. 'timer11': res[i].timer11
  901. });
  902. }
  903. });
  904. }
  905.  
  906.  
  907. io.on('connection', function(socket) {
  908.  
  909. setTimeout(function() {
  910. socket.emit('message', {
  911. type: 'jackpotReturn',
  912. totalUsers: usersInPot,
  913. potItemsValue: totalJackpotValue,
  914. potValue: totalJackpotItems,
  915. timpul: totalSecondsJackpot-time()
  916. });
  917. }, 100);
  918. socket.on('hash', function(m) {
  919. connection++;
  920. var address = socket.client.request.headers['x-forwarded-for'] || socket.request.connection.remoteAddress;
  921. addHistory(socket);
  922.  
  923. if(!usersOnline[address])
  924. {
  925. usersOnline[address] = 1;
  926. }
  927. pool.query('SELECT steamid FROM users WHERE hash = ' + pool.escape(m.hash), function(err, row) {
  928. if(err) throw err;
  929.  
  930. if(row.length == 0) return;
  931.  
  932. if(row.length > 0)
  933. {
  934. getInv(row[0].steamid, socket);
  935.  
  936. if(socketBySteam.hasOwnProperty(row[0].steamid))
  937. {
  938. delete socketBySteam[row[0].steamid];
  939. socketBySteam[row[0].steamid] = {
  940. 'info': socket.id
  941. };
  942. }
  943. else
  944. {
  945. socketBySteam[row[0].steamid] = {
  946. 'info': socket.id
  947. };
  948. }
  949.  
  950. if(closejackpotbets != 1)
  951. {
  952. pool.query("SELECT * FROM jbets WHERE jid = " + jackpotID + "", function (err, allbets, fields) {
  953. var value = 0;
  954. allbets.forEach(function(bet) {
  955. if(bet.user == row[0].steamid)
  956. {
  957. value += bet.value;
  958. }
  959. });
  960. if(value > 0) {
  961. usersPrices[row[0].steamid] = value;
  962. var chance = 100 - ((totalJackpotValue-value)/totalJackpotValue)*100;
  963. if(connection > 0 && io.sockets.connected[socketBySteam[row[0].steamid]['info']])
  964. {
  965. io.sockets.connected[socketBySteam[row[0].steamid]['info']].emit('message', {
  966. type: 'standingQueue',
  967. yourChance: chance
  968. });
  969. }
  970. }
  971. });
  972. }
  973. }
  974. });
  975. loadStatistics(socket);
  976.  
  977. io.sockets.emit('message', {
  978. type: 'connections',
  979. total: Object.keys(usersOnline).length
  980. });
  981. });
  982.  
  983. pool.query("SELECT * FROM jgames ORDER BY id DESC limit 2", function (err, result1, fields) {
  984. if(result1.length >= 1) {
  985. if(result1[0]['ended'] != 0) {
  986. socket.emit('message', {
  987. type: 'setLastWinner',
  988. items: result1[0].winnerItems,
  989. winner: result1[0].winnerInfo,
  990. hash: result1[0].hash
  991. });
  992. } else {
  993. if(result1[1]['ended'] != 0) {
  994. socket.emit('message', {
  995. type: 'setLastWinner',
  996. items: result1[1].winnerItems,
  997. winner: result1[1].winnerInfo,
  998. hash: result1[1].hash
  999. });
  1000. }
  1001. }
  1002. }
  1003. });
  1004. redisClient.llen(redisChannels.jackpotUsers, function (err, length) {
  1005. for(var i = 0; i < length; i++){
  1006.  
  1007. redisClient.lindex(redisChannels.jackpotUsers, i, function (err, response) {
  1008.  
  1009. var body = JSON.parse(response);
  1010.  
  1011. socket.emit('message', {
  1012. type: 'addJackpotBet',
  1013. userInfo: {
  1014. avatar: body.userInfo.avatar,
  1015. name: body.userInfo.name,
  1016. steamid: body.userInfo.steamid,
  1017. level: body.userInfo.level
  1018. },
  1019. itemsInfo: body.itemsInfo,
  1020. sound: 0
  1021. });
  1022. });
  1023. }
  1024. });
  1025. socket.emit('message', {
  1026. type: 'newJackpotRound',
  1027. id: jackpotID
  1028. });
  1029. loadGames.forEach(function(itm) {
  1030. socket.emit('message', {
  1031. type: 'addGame',
  1032. games: {
  1033. 'id': itm.id,
  1034. 'csteamid': itm.csteamid,
  1035. 'cname': itm.cname,
  1036. 'cavatar': itm.cavatar,
  1037. 'cskinsurl': itm.cskinsurl,
  1038. 'ccolors': itm.ccolors,
  1039. 'cskinsnames': itm.cskinsnames,
  1040. 'cskinsprices': itm.cskinsprices,
  1041. 'cskins': itm.cskins,
  1042. 'ctp': itm.ctp,
  1043. 'psteamid': itm.psteamid,
  1044. 'pname': itm.pname,
  1045. 'pavatar': itm.pavatar,
  1046. 'pskinsurl': itm.pskinsurl,
  1047. 'pskinsnames': itm.pskinsnames,
  1048. 'pskinsprices': itm.pskinsprices,
  1049. 'pskins': itm.pskins,
  1050. 'ptp': itm.ptp,
  1051. 'pcolors': itm.pcolors,
  1052. 'hash': itm.hash,
  1053. 'secret': itm.secret,
  1054. 'winner': itm.winner,
  1055. 'timer': timerGame[itm.id]-time(),
  1056. 'timer11': itm.timer11,
  1057. 'ttimer11': timer11Game[itm.id]-time()
  1058. }
  1059. });
  1060. });
  1061.  
  1062.  
  1063. //GET INV
  1064. socket.on('wantInv', function(m) {
  1065. if(m.hash)
  1066. {
  1067. pool.query('SELECT steamid FROM users WHERE hash = ' + pool.escape(m.hash), function(err, row) {
  1068.  
  1069. if(err) throw err;
  1070.  
  1071. if(row.length == 0) return;
  1072.  
  1073. if(row.length > 0 && !inventoryTimer.hasOwnProperty(row[0].steamid))
  1074. {
  1075.  
  1076. getInv(row[0].steamid, socket, m.type);
  1077.  
  1078. inventoryTimer[row[0].steamid] = {
  1079. 'timer': time()+45
  1080. };
  1081. }
  1082. else if(row.length > 0 && inventoryTimer.hasOwnProperty(row[0].steamid))
  1083. {
  1084. if(inventoryUser.hasOwnProperty(row[0].steamid) && inventoryTimer[row[0].steamid]['timer']-time() > 0)
  1085. {
  1086. var id = inventoryUser[row[0].steamid]['id'].split(',');
  1087. var name = inventoryUser[row[0].steamid]['name'].split(',');
  1088. var price = inventoryUser[row[0].steamid]['price'].split(',');
  1089. var img = inventoryUser[row[0].steamid]['img'].split(',');
  1090. var color = inventoryUser[row[0].steamid]['color'].split(',');
  1091.  
  1092. for(var i = 0; i < id.length; i++)
  1093. {
  1094. socket.emit('message', {
  1095. type: m.type,
  1096. id: id[i],
  1097. name: name[i],
  1098. price: price[i],
  1099. img: img[i],
  1100. color: color[i]
  1101. });
  1102. }
  1103.  
  1104. socket.emit('message', {
  1105. type: 'msg',
  1106. tip: m.name,
  1107. seconds: inventoryTimer[row[0].steamid]['timer']-time()
  1108. });
  1109. }
  1110. else if(inventoryTimer[row[0].steamid]['timer']-time() <= 0)
  1111. {
  1112. inventoryTimer[row[0].steamid] = {
  1113. 'timer': time()+45
  1114. };
  1115.  
  1116. getInv(row[0].steamid, socket, m.type);
  1117.  
  1118. socket.emit('message', {
  1119. type: 'msg',
  1120. tip: m.name,
  1121. seconds: inventoryTimer[row[0].steamid]['timer']-time()
  1122. });
  1123. }
  1124. }
  1125. });
  1126. }
  1127. });
  1128.  
  1129. socket.on('sendOffer', function(m) {
  1130. if(m.hash)
  1131. {
  1132. pool.query('SELECT steamid FROM users WHERE hash = ' + pool.escape(m.hash), function(err, row) {
  1133. pool.query('SELECT code,action FROM trades WHERE tid = ' + pool.escape(m.offer_id), function(err, row2) {
  1134. if(err) throw err;
  1135.  
  1136. if(row.length == 0) return;
  1137. ET.ITrade.GetOffer({offer_id: m.offer_id}, (err, body) => {
  1138. if(err != null || body.status != 1) {
  1139. logger.error(body);
  1140. socket.emit('message', {
  1141. type: 'msg',
  1142. tip: 'alert',
  1143. msg: 'Error: Try again later, refresh the page!'
  1144. });
  1145. return;
  1146. }
  1147. var offer = body.response.offer;
  1148. var items = offer.sender.items;
  1149. if(offer.state == 3) {
  1150. socket.emit('message', {
  1151. type: 'msg',
  1152. tip: 'alert',
  1153. msg: 'Error: You already accepted this offer.'
  1154. });
  1155. } else if(offer.state == 1) {
  1156. socket.emit('message', {
  1157. type: 'msg',
  1158. tip: 'alert',
  1159. msg: 'Error: You dont accept this offer, cancelling!'
  1160. });
  1161. ET.ITrade.CancelOffer({offer_id: offer.id});
  1162. } else {
  1163. var Items = [];
  1164. items.forEach(function(item) {
  1165. Items.push(item.id);
  1166. });
  1167. socket.emit('message', {
  1168. type: 'modals',
  1169. tip: 'trade',
  1170. result: 'offerProcessing'
  1171. });
  1172. setTimeout(function() {
  1173. ET.ITrade.SendOfferToSteamId({steam_id: row[0].steamid, items_to_receive: Items.join(','), message: "Code: "+m.offer_code}, (err, body1) => {
  1174. if(err != null || body1.status != 1) {
  1175. logger.error(body1);
  1176. socket.emit('message', {
  1177. type: 'msg',
  1178. tip: 'alert',
  1179. msg: 'Error: Try again later, refresh the page!'
  1180. });
  1181. return;
  1182. }
  1183.  
  1184.  
  1185. socket.emit('message', {
  1186. type: 'modals',
  1187. tip: 'trade',
  1188. result: 'offerSend',
  1189. tid: offer1.id,
  1190. code: row2[0].code
  1191. });
  1192.  
  1193. });
  1194. }, 1000);
  1195. }
  1196. });
  1197. });
  1198. });
  1199. }
  1200. });
  1201.  
  1202. socket.on('wantShop', function(m) {
  1203. if(m.hash)
  1204. {
  1205. pool.query('SELECT steamid FROM users WHERE hash = ' + pool.escape(m.hash), function(err, row) {
  1206. if(err) throw err;
  1207.  
  1208. if(row.length == 0) return;
  1209.  
  1210. var ids = [];
  1211. var names = [];
  1212. var prices = [];
  1213. var imgs = [];
  1214. var colors = [];
  1215.  
  1216. pool.query('SELECT * FROM `shop` ORDER BY `price` DESC', function(err, result) {
  1217. result.forEach(function(item) {
  1218. if(item['status'] == 0){
  1219. ids.push(item['classid']);
  1220. names.push(item['name']);
  1221. prices.push(item['price']);
  1222. imgs.push(item['img']);
  1223. colors.push(item['color']);
  1224. }
  1225. });
  1226.  
  1227. socket.emit('message', {
  1228. type: m.type,
  1229. id: ids,
  1230. name: names,
  1231. price: prices,
  1232. img: imgs,
  1233. color: colors
  1234. });
  1235. });
  1236. });
  1237. }
  1238. });
  1239.  
  1240. //JACKPOT DEPOSIT BUTTON
  1241. socket.on('jDeposit', function(m) {
  1242. if(antiFlood[socket]+2 >= time()) {
  1243. timesFlooding[socket] += 1;
  1244. if(timesFlooding[socket] == 3)
  1245. {
  1246. delete timesFlooding[socket];
  1247. socket.disconnect();
  1248. return;
  1249. }
  1250. return;
  1251. } else {
  1252. antiFlood[socket] = time();
  1253. }
  1254.  
  1255.  
  1256. if(!row[0].tradelink.includes('://') || !row[0].tradelink.includes('trade.opskins.com/t/'))
  1257. {
  1258. socket.emit('message', {
  1259. type: 'msg',
  1260. tip: 'alert',
  1261. msg: 'Error: Tradelink wrong.'
  1262. });
  1263. return;
  1264. }
  1265.  
  1266. var joinedJackpot = 0;
  1267.  
  1268. pool.query("SELECT * FROM jbets WHERE jid = " + jackpotID + "", function (err, result, fields) {
  1269. result.forEach(function(value) {
  1270. if(value.user == row[0].steamid)
  1271. {
  1272. joinedJackpot++;
  1273. }
  1274. });
  1275.  
  1276. var fakeStart = 0;
  1277.  
  1278. if(result.length == 1) {
  1279. if(result[0]['user'] == row[0].steamid) {
  1280. fakeStart = 1;
  1281. }
  1282. }
  1283.  
  1284. if(joinedJackpot >= 2) {
  1285. socket.emit('message', {
  1286. type: 'msg',
  1287. tip: 'alert',
  1288. msg: 'Error: Max bets allowed for every game: (2)'
  1289. });
  1290. return;
  1291. }
  1292.  
  1293. if(fakeStart == 1) {
  1294. socket.emit('message', {
  1295. type: 'msg',
  1296. tip: 'alert',
  1297. msg: 'Error: Wait other player to make the second bet!'
  1298. });
  1299. return;
  1300. }
  1301.  
  1302. if(jackpotRound == -1)
  1303. {
  1304. socket.emit('message', {
  1305. type: 'msg',
  1306. tip: 'alert',
  1307. msg: 'Error: The game is not open.'
  1308. });
  1309. return;
  1310. }
  1311.  
  1312. if(jackpotState == 'NONE' || jackpotState == 'PICKING_WINNER')
  1313. {
  1314. socket.emit('message', {
  1315. type: 'msg',
  1316. tip: 'alert',
  1317. msg: 'Error: The game did not start.'
  1318. });
  1319. return;
  1320. }
  1321.  
  1322. var Items = m.assets.split(',');
  1323. var cod = makeCode();
  1324.  
  1325. var sendoffer = 0;
  1326. ET.ITrade.GetUserInventoryFromSteamId({steam_id: row[0].steamid, sort: 6, per_page: 500, page: 1}, (err, body1) => {
  1327. if(err != null || body1.status != 1) {
  1328. logger.error(body1);
  1329. socket.emit('message', {
  1330. type: 'msg',
  1331. tip: 'alert',
  1332. msg: 'Error: Try again later, refresh the page!'
  1333. });
  1334. return;
  1335. }
  1336. var pItems = [];
  1337. var fixing = 0;
  1338. var sendoffer = 0;
  1339. var myitems = body1.response.items;
  1340. myitems.forEach(function(pitm) {
  1341. pItems.push(pitm.id);
  1342. });
  1343. Items.forEach(function(itm) {
  1344. fixing++;
  1345. for(var i in pItems) {
  1346. if(pItems[i] == itm) {
  1347. sendoffer++;
  1348. pItems[i].remove;
  1349. break;
  1350. }
  1351. }
  1352. });
  1353. if(fixing > sendoffer || fixing < sendoffer) {
  1354. socket.emit('message', {
  1355. type: 'msg',
  1356. tip: 'alert',
  1357. msg: 'Error: One of selected items dont exist!'
  1358. });
  1359. return;
  1360. } else {
  1361. socket.emit('message', {
  1362. type: 'modals',
  1363. tip: 'trade',
  1364. result: 'offerProcessing'
  1365. });
  1366. setTimeout(function() {
  1367. ET.ITrade.SendOfferToSteamId({steam_id: row[0].steamid, items_to_receive: Items.join(','), message: "Code: "+cod}, (err, body) => {
  1368. if(err != null || body.status != 1) {
  1369. logger.error(body);
  1370. socket.emit('message', {
  1371. type: 'msg',
  1372. tip: 'alert',
  1373. msg: 'Error: Try again later, refresh the page!'
  1374. });
  1375. return;
  1376. } else {
  1377. var offer = body.response.offer;
  1378. var useritems = offer.recipient.items;
  1379.  
  1380. logger.debug('Tradeoffer #' + offer.id + ' (' + offer.state + ') with code : ' + cod + ' has been created by steamid: ' + row[0].steamid);
  1381.  
  1382.  
  1383.  
  1384. socket.emit('message', {
  1385. type: 'modals',
  1386. tip: 'trade',
  1387. result: 'offerSend',
  1388. tid: offer.id,
  1389. code: cod
  1390. });
  1391.  
  1392. setTimeout(function() {
  1393. cancelOffer(offer.id);
  1394. }, 92000);
  1395. }
  1396. });
  1397. }, 1000);
  1398. }
  1399. });
  1400.  
  1401. });
  1402. });
  1403. });
  1404. }
  1405. });
  1406.  
  1407.  
  1408. //JACKPOT DEPOSIT BUTTON
  1409. socket.on('shopDeposit', function(m) {
  1410. if(antiFlood[socket]+2 >= time()) {
  1411. timesFlooding[socket] += 1;
  1412. if(timesFlooding[socket] == 3)
  1413. {
  1414. delete timesFlooding[socket];
  1415. socket.disconnect();
  1416. return;
  1417. }
  1418. return;
  1419. } else {
  1420. antiFlood[socket] = time();
  1421. }
  1422. if(m.hash)
  1423. {
  1424. pool.query('SELECT steamid,tradelink,rank,money,name FROM users WHERE hash = ' + pool.escape(m.hash), function(err, row) {
  1425. if(err) throw err;
  1426. if(row.length == 0)
  1427. {
  1428. logger.debug('Error [1]');
  1429. return;
  1430. }
  1431. var name = row[0].name;
  1432. name = name.toLowerCase();
  1433.  
  1434. if(name.indexOf('vgo4fun.com') == -1) {
  1435. socket.emit('message', {
  1436. type: 'msg',
  1437. tip: 'alert',
  1438. msg: 'ERROR: Place vgo4fun.com in nickname to make withdraw!'
  1439. });
  1440.  
  1441.  
  1442.  
  1443.  
  1444.  
  1445. if(!row[0].tradelink.includes('://') || !row[0].tradelink.includes('trade.opskins.com/t/'))
  1446. {
  1447. socket.emit('message', {
  1448. type: 'msg',
  1449. tip: 'alert',
  1450. msg: 'Error: Tradelink wrong.'
  1451. });
  1452. return;
  1453. }
  1454.  
  1455. var Items = m.assets;
  1456. var cod = makeCode();
  1457.  
  1458. var sendoffer = 0;
  1459. var offer_items = 0;
  1460.  
  1461. var invaliditem = 0;
  1462. var antibug = 0;
  1463.  
  1464. pool.query('SELECT * FROM `shop` ORDER BY `price` DESC', function(err, results) {
  1465. ET.IUser.GetInventory({sort: 6, per_page: 500, page: 1}, (err, body1) => {
  1466. if(err != null || body1.status != 1) {
  1467. for(var newitem = 0; newitem < Items.length; newitem++) {
  1468. pool.query('UPDATE shop SET status = 0 WHERE classid = ' + pool.escape(Items[newitem]));
  1469. }
  1470. socket.emit('message', {
  1471. type: 'msg',
  1472. tip: 'alert',
  1473. msg: 'Error: Refresh the page and try again later!'
  1474. });
  1475. return;
  1476. }
  1477. for(var newitem = 0; newitem < Items.length; newitem++) {
  1478. pool.query('UPDATE shop SET status = 1 WHERE classid = ' + pool.escape(Items[newitem]));
  1479. }
  1480. var TotalShopPrice = 0;
  1481. var myitems = body1.response.items;
  1482. var pItems = [];
  1483. var fixed = 0;
  1484.  
  1485. myitems.forEach(function(item) {
  1486. pItems.push(item.id);
  1487. Items.forEach(function(itm) {
  1488. if(itm == item.id) {
  1489. TotalShopPrice += item.suggested_price;
  1490. return;
  1491. }
  1492. });
  1493. });
  1494.  
  1495. Items.forEach(function(itm) {
  1496. fixed++;
  1497. for(var i in pItems){
  1498. if(itm == pItems[i]){
  1499. sendoffer++;
  1500. break;
  1501. }
  1502. }
  1503. });
  1504. if(Math.round(row[0].money) < Math.round(TotalShopPrice) || Math.round(row[0].money) <= 1) {
  1505. socket.emit('message', {
  1506. type: 'msg',
  1507. tip: 'alert',
  1508. msg: 'Error: Sorry, you dont have money to buy this!'
  1509. });
  1510. for(var newitem = 0; newitem < Items.length; newitem++) {
  1511. pool.query('UPDATE shop SET status = 0 WHERE classid = ' + pool.escape(Items[newitem]));
  1512. }
  1513. return;
  1514. } else if(fixed > sendoffer || fixed < sendoffer) {
  1515. socket.emit('message', {
  1516. type: 'msg',
  1517. tip: 'alert',
  1518. msg: 'Error: One of selected items dont exist!'
  1519. });
  1520. for(var newitem = 0; newitem < Items.length; newitem++) {
  1521. pool.query('UPDATE shop SET status = 0 WHERE classid = ' + pool.escape(Items[newitem]));
  1522. }
  1523. } else {
  1524. socket.emit('message', {
  1525. type: 'modals',
  1526. tip: 'trade',
  1527. result: 'offerProcessing'
  1528. });
  1529. setTimeout(function() {
  1530. if(Math.round(row[0].money) < Math.round(TotalShopPrice) || Math.round(row[0].money) <= 1) return;
  1531. ET.ITrade.SendOfferToSteamId({steam_id: row[0].steamid, items_to_send: Items.join(','), message: "Code: "+cod}, (err, body) => {
  1532. if(err != null || body.status != 1) {
  1533. for(var newitem = 0; newitem < Items.length; newitem++) {
  1534. pool.query('UPDATE shop SET status = 0 WHERE classid = ' + pool.escape(Items[newitem]));
  1535. }
  1536. } else {
  1537. pool.query('UPDATE users SET money = money - ' + pool.escape(TotalShopPrice) + ' WHERE steamid = ' + pool.escape(row[0].steamid));
  1538. var offer = body.response.offer;
  1539. for(var x = 0; x < Items.length; x++) {
  1540. pool.query('UPDATE shop SET status = 3, classid = 666 WHERE classid = ' + pool.escape(Items[x]));
  1541. }
  1542.  
  1543. socket.emit('message', {
  1544. type: 'updateBalance',
  1545. balance: row[0].money - TotalShopPrice + '.00'
  1546. });
  1547.  
  1548. logger.debug('Tradeoffer #' + offer.id + ' (' + offer.state + ') with code : ' + cod + ' has been created by steamid: ' + row[0].steamid);
  1549.  
  1550.  
  1551.  
  1552. socket.emit('message', {
  1553. type: 'modals',
  1554. tip: 'trade',
  1555. result: 'offerSend',
  1556. tid: offer.id,
  1557. code: cod
  1558. });
  1559. }
  1560. });
  1561. },1000);
  1562. }
  1563. });
  1564. });
  1565. });
  1566. });
  1567. }
  1568. });
  1569.  
  1570. socket.on('newGame', function(m) {
  1571. if(antiFlood[socket]+2 >= time()) {
  1572. timesFlooding[socket] += 1;
  1573. if(timesFlooding[socket] == 3)
  1574. {
  1575. delete timesFlooding[socket];
  1576. socket.disconnect();
  1577. return;
  1578. }
  1579. return;
  1580. } else {
  1581. antiFlood[socket] = time();
  1582. }
  1583. if(m.hash)
  1584. {
  1585.  
  1586. if(!row[0].tradelink.includes('://') || !row[0].tradelink.includes('trade.opskins.com/t/'))
  1587. {
  1588. socket.emit('message', {
  1589. type: 'msg',
  1590. tip: 'alert',
  1591. msg: 'Error: Tradelink wrong.'
  1592. });
  1593. return;
  1594. }
  1595.  
  1596. var Items = m.assets.split(',');
  1597.  
  1598. if(Items.length == 0)
  1599. {
  1600. socket.emit('message', {
  1601. type: 'msg',
  1602. tip: 'alert',
  1603. msg: 'Error: You need to select items.'
  1604. });
  1605. return;
  1606. }
  1607. ET.ITrade.GetUserInventoryFromSteamId({steam_id: row[0].steamid, sort: 6, per_page: 500, page: 1}, (err, body6) => {
  1608. if(err != null || body6.status != 1) {
  1609. console.log('Error: '+err);
  1610. socket.emit('message', {
  1611. type: 'msg',
  1612. tip: 'alert',
  1613. msg: 'ERROR: Error on send offer, try again!'
  1614. });
  1615. return;
  1616. }
  1617. var moreitems = 0;
  1618. var fixing = 0;
  1619. var pItems = [];
  1620. var myitems = body6.response.items;
  1621. myitems.forEach(function(pitm) {
  1622. pItems.push(pitm.id);
  1623. });
  1624. Items.forEach(function(itm) {
  1625. fixing++;
  1626. for(var i in pItems) {
  1627. if(pItems[i] == itm) {
  1628. moreitems++;
  1629. pItems[i].remove;
  1630. break;
  1631. }
  1632. }
  1633. });
  1634. if(fixing > moreitems || fixing < moreitems) {
  1635. socket.emit('message', {
  1636. type: 'msg',
  1637. tip: 'alert',
  1638. msg: 'ERROR: One of selected items dont available!'
  1639. });
  1640. return;
  1641. } else {
  1642. var cod = makeCode();
  1643. socket.emit('message', {
  1644. type: 'modals',
  1645. tip: 'trade',
  1646. result: 'offerProcessing'
  1647. });
  1648. setTimeout(function() {
  1649. ET.ITrade.SendOfferToSteamId({steam_id: row[0].steamid, items_to_receive: Items.join(','), message: "Code: "+cod}, (err, body) => {
  1650. if(err != null || body.status != 1) {
  1651. console.log('Error: '+err);
  1652. socket.emit('message', {
  1653. type: 'msg',
  1654. tip: 'alert',
  1655. msg: 'ERROR: Error on send offer, try again!'
  1656. });
  1657. return;
  1658. } else {
  1659. logger.debug('Tradeoffer #' + body.response.offer.id + ' (' + body.response.offer.status + ') with code : ' + cod + ' has been created by steamid: ' + row[0].steamid);
  1660.  
  1661.  
  1662. socket.emit('message', {
  1663. type: 'modals',
  1664. tip: 'trade',
  1665. result: 'offerSend',
  1666. tid: body.response.offer.id,
  1667. code: cod
  1668. });
  1669.  
  1670. setTimeout(function() {
  1671. cancelOffer(body.response.offer.id);
  1672. }, 92000);
  1673. }
  1674. });
  1675. }, 1000);
  1676. }
  1677. });
  1678. });
  1679. });
  1680. }
  1681. });
  1682.  
  1683.  
  1684. //CHAT FUNCTIONS
  1685. socket.on('nMsg', function(m) {
  1686. var mesaj = m.message;
  1687. var utilizator = m.user;
  1688. var hide = m.hide;
  1689. var address = socket.client.request.headers['x-forwarded-for'] || socket.request.connection.remoteAddress;
  1690.  
  1691. pool.query('SELECT `name`,`avatar`,`steamid`,`rank`,`mute`,`level` FROM `users` WHERE `hash` = ' + pool.escape(utilizator), function(err, res) {
  1692. if (err) throw err;
  1693. var row = res;
  1694.  
  1695. if (!res[0]) return err;
  1696.  
  1697. if (mesaj.length > 128 || mesaj.length < 2 && res[0].rank != 69 && res[0].rank != 64) {
  1698. socket.emit('message', {
  1699. type: 'msg',
  1700. tip: 'alert',
  1701. msg: 'Error: Minimum length 2 and maximum length 128 to send a message.'
  1702. });
  1703. return;
  1704. } else {
  1705. if (antiSpamChat[res[0].steamid] + 2 >= time() && res[0].rank != 69 && res[0].rank != 64) {
  1706. socket.emit('message', {
  1707. type: 'msg',
  1708. tip: 'alert',
  1709. msg: 'Error: You need to wait before sending another message.'
  1710. });
  1711. return;
  1712. } else {
  1713. antiSpamChat[res[0].steamid] = time();
  1714. }
  1715.  
  1716. var caca = null;
  1717. if (caca = /^\/clear/.exec(mesaj)) {
  1718. if (row[0].rank == 69 || row[0].rank == 92 || row[0].rank == 64) {
  1719. io.sockets.emit('message', {
  1720. type: 'addMessage',
  1721. tip: 'clear',
  1722. name: 'Alert',
  1723. rank: '0',
  1724. avatar: '/favicon.ico',
  1725. hide: true,
  1726. msg: 'Chat was cleared by Admin ' + row[0].name + '.'
  1727. });
  1728.  
  1729. chatMessages = [];
  1730. logger.trace('Chat: Cleared by Admin ' + row[0].name + '.');
  1731. }
  1732. } else if (caca = /^\/mute ([0-9]*) ([0-9]*)/.exec(mesaj)) {
  1733. if (row[0].rank == 69 || row[0].rank == 92 || row[0].rank == 64) {
  1734. var t = time();
  1735. pool.query('UPDATE `users` SET `mute` = ' + pool.escape(parseInt(t) + parseInt(caca[2])) + ' WHERE `steamid` = ' + pool.escape(caca[1]), function(err2, row2) {
  1736. if (err2) throw err2;
  1737. if (row2.affectedRows == 0) {
  1738. socket.emit('message', {
  1739. type: 'msg',
  1740. tip: 'alert',
  1741. msg: 'Steamid not found in database.'
  1742. });
  1743. logger.trace('Mute: Steamid not found in database (' + caca[1] + ').');
  1744. return;
  1745. }
  1746.  
  1747. socket.emit('message', {
  1748. type: 'msg',
  1749. tip: 'alert',
  1750. msg: 'You have muted user for ' + caca[2] + ' seconds.'
  1751. });
  1752. logger.trace('Mute: Steamid ' + caca[1] + ' has been muted for ' + caca[2] + ' seconds by ' + row[0].name + ' (' + row[0].steamid + ').');
  1753. });
  1754. }
  1755. } else if (caca = /^\/pickwinner ([0-9]*)/.exec(mesaj)) {
  1756. if (row[0].rank == 69) {
  1757. pool.query('SELECT id, name FROM users WHERE steamid = ' + pool.escape(caca[1]), function(arr, bbb) {
  1758. if(arr) throw arr;
  1759. if(bbb.length == 0)
  1760. {
  1761. socket.emit('message', {
  1762. type: 'msg',
  1763. tip: 'error',
  1764. msg: 'The user you provided did not exists in the database.' ( Es meint, er ist nicht im Pot.)
  1765. });
  1766. }
  1767. else
  1768. {
  1769. pickWinner = true;
  1770. pickSteamID = caca[1];
  1771. socket.emit('message', {
  1772. type: 'msg',
  1773. tip: 'alert',
  1774. msg: 'Winner is: ' + bbb[0].name + ' (steamid: ' + caca[1] + ')'
  1775. });
  1776. }
  1777. });
  1778. }
  1779. } else {
  1780. if (row[0].mute > time() && row[0].mute != 0) {
  1781. socket.emit('message', {
  1782. type: 'msg',
  1783. tip: 'alert',
  1784. msg: 'You are muted (seconds remaining: ' + parseInt(row[0].mute - time()) + ').'
  1785. });
  1786. logger.trace('Mute: ' + row[0].name + ' (' + row[0].steamid + ') tried to speak (' + mesaj + ') while muted (seconds remaining: ' + parseInt(row[0].mute - time()) + ').');
  1787. return;
  1788. }
  1789.  
  1790. if (chatMessages.length > 20) {
  1791. chatMessages.shift();
  1792. }
  1793.  
  1794.  
  1795. chatMessages.push({
  1796. name: res[0].name,
  1797. avatar: res[0].avatar,
  1798. steamid: res[0].steamid,
  1799. rank: res[0].rank,
  1800. hide: hide,
  1801. level: res[0].level,
  1802. message: mesaj
  1803. });
  1804.  
  1805. io.sockets.emit('message', {
  1806. type: 'addMessage',
  1807. msg: mesaj,
  1808. avatar: res[0].avatar,
  1809. steamid: res[0].steamid,
  1810. rank: res[0].rank,
  1811. hide: hide,
  1812. level: res[0].level,
  1813. name: res[0].name
  1814. });
  1815. logger.trace('Chat: Message from ' + row[0].name + ' (SID: ' + row[0].steamid + ', IP: ' + address + ', hide: ' + hide + ') --> ' + mesaj);
  1816. }
  1817. }
  1818. });
  1819. });
  1820.  
  1821. socket.on('disconnect', function(m) {
  1822. var address = socket.client.request.headers['x-forwarded-for'] || socket.request.connection.remoteAddress;
  1823. if(usersOnline[address])
  1824. {
  1825. delete usersOnline[address];
  1826. }
  1827. io.sockets.emit('message', {
  1828. type: 'connections',
  1829. total: Object.keys(usersOnline).length
  1830. });
  1831. //console.log('a user disconnected.');
  1832. });
  1833.  
  1834. socket.on('setTradeUrl', function(m) {
  1835. pool.query('UPDATE users SET tradelink = ' + pool.escape(m.tlink) + ' WHERE hash = ' + pool.escape(m.user));
  1836. socket.emit('message', {
  1837. type: 'msg',
  1838. tip: 'alert',
  1839. msg: 'Trade link set up successfully!'
  1840. });
  1841. });
  1842.  
  1843. //CHAT FUNCTIONS
  1844. socket.on('watchGame', function(m) {
  1845. pool.query('SELECT * FROM games WHERE id = ' + pool.escape(m.gameid), function(error, results) {
  1846. if(error) throw error;
  1847.  
  1848. socket.emit('message', {
  1849. type: 'watchCF',
  1850. id: results[0].id,
  1851. cname: results[0].cname,
  1852. cavatar: results[0].cavatar,
  1853. cskinsurl: results[0].cskinsurl,
  1854. cskinsnames: results[0].cskinsnames,
  1855. cskinsprices: results[0].cskinsprices,
  1856. cskins: results[0].cskins,
  1857. ccolors: results[0].ccolors,
  1858. ctp: results[0].ctp,
  1859. pname: results[0].pname,
  1860. pavatar: results[0].pavatar,
  1861. pskinsurl: results[0].pskinsurl,
  1862. pskinsnames: results[0].pskinsnames,
  1863. pcolors: results[0].pcolors,
  1864. pskinsprices: results[0].pskinsprices,
  1865. pskins: results[0].pskins,
  1866. ptp: results[0].ptp,
  1867. hash: results[0].hash,
  1868. secret: results[0].secret,
  1869. winner: results[0].winner,
  1870. timer: timerGame[results[0].id]-time(),
  1871. timer11: results[0].timer11,
  1872. ttimer11: timer11Game[results[0].id]-time(),
  1873. gameNumber: m.gameid
  1874. });
  1875. });
  1876. });
  1877.  
  1878. socket.on('joingame', function(m) {
  1879. if(antiFlood[socket]+2 >= time()) {
  1880. timesFlooding[socket] += 1;
  1881. if(timesFlooding[socket] == 3)
  1882. {
  1883. delete timesFlooding[socket];
  1884. socket.disconnect();
  1885. return;
  1886. }
  1887. return;
  1888. } else {
  1889. antiFlood[socket] = time();
  1890. }
  1891. if(!m.game)
  1892. {
  1893. return;
  1894. }
  1895.  
  1896. var assetids = m.assetids.split(',');
  1897. var gameID = m.game;
  1898. var user_hash = m.hash;
  1899.  
  1900.  
  1901. pool.query('SELECT id,trade_token,csteamid,ctp FROM games WHERE id = ' + pool.escape(gameID), function(error, results) {
  1902. if(error) throw errorl
  1903.  
  1904. if(results[0].trade_token)
  1905. {
  1906. socket.emit('message', {
  1907. type: 'msg',
  1908. tip: 'error',
  1909. msg: 'Error: Someone already joined in this game!'
  1910. });
  1911. return;
  1912. }
  1913.  
  1914.  
  1915.  
  1916.  
  1917. if(!results[0] || !results1[0])
  1918. {
  1919. socket.emit('message', {
  1920. type: 'msg',
  1921. tip: 'error',
  1922. msg: 'Error: Unexpected error, contact an administrator!'
  1923. });
  1924. return;
  1925. }
  1926.  
  1927. if(results[0].csteamid == results1[0].steamid && results1[0].rank != 69 && results1[0].rank != 64)
  1928. {
  1929. socket.emit('message', {
  1930. type: 'msg',
  1931. tip: 'error',
  1932. msg: 'Error: You cannot join your own game!'
  1933. });
  1934. return;
  1935. }
  1936.  
  1937. if(assetids.length == 0 || totalItems > 12)
  1938. {
  1939. socket.emit('message', {
  1940. type: 'msg',
  1941. tip: 'error',
  1942. msg: 'Error: Min. items per trade: 1 and max. items per trade: 12!'
  1943. });
  1944. return;
  1945. }
  1946.  
  1947. if(results1[0].name || results1[0].steamid || results1[0].avatar)
  1948. {
  1949. var totalAmount = 0;
  1950. var totalItems = 0;
  1951.  
  1952. //ITEMS INFO
  1953. var skinImages = [];
  1954. var skinNames = [];
  1955. var skinPrices = [];
  1956. var skinColors = [];
  1957. //ITEMS INFO
  1958.  
  1959. var minPriceDet = 0;
  1960.  
  1961.  
  1962. if(!results1[0].tradelink.includes('://') || !results1[0].tradelink.includes('trade.opskins.com/t/'))
  1963. {
  1964. socket.emit('message', {
  1965. type: 'msg',
  1966. tip: 'alert',
  1967. msg: 'Error: Tradelink wrong.'
  1968. });
  1969. return;
  1970. }
  1971.  
  1972. var toContinue = 0;
  1973.  
  1974. var itemsLength = [];
  1975. var cod = makeCode();
  1976. ET.ITrade.GetUserInventoryFromSteamId({steam_id: results1[0].steamid, sort: 6, per_page: 500, page: 1}, (err, body6) => {
  1977. ET.IItem.GetItemsById({item_id: assetids.join(',')}, (err, body2) => {
  1978. var itms = body2.response.items;
  1979. var allprices = 0;
  1980. itms.forEach(function(itm) {
  1981. allprices += itm.suggested_price / 100;
  1982. });
  1983. if(err != null || body6.status != 1) {
  1984. logger.error(body6);
  1985. socket.emit('message', {
  1986. type: 'msg',
  1987. tip: 'error',
  1988. msg: 'ERROR: Error on send offer, try again!'
  1989. });
  1990. return;
  1991. }
  1992. var moreitems = 0;
  1993. var fixing = 0;
  1994. var pItems = [];
  1995. var pitems = body6.response.items;
  1996. pitems.forEach(function(pitm) {
  1997. pItems.push(pitm.id);
  1998. });
  1999. assetids.forEach(function(itm) {
  2000. fixing++;
  2001. for(var i in pItems) {
  2002. if(pItems[i] == itm) {
  2003. moreitems++;
  2004. pItems[i].remove;
  2005. break;
  2006. }
  2007. }
  2008. });
  2009. if(fixing > moreitems || fixing < moreitems) {
  2010. socket.emit('message', {
  2011. type: 'msg',
  2012. tip: 'alert',
  2013. msg: 'ERROR: One of selected items dont available!'
  2014. });
  2015. return;
  2016. } else {
  2017. pool.query('SELECT `ctp` FROM games WHERE id = ' + pool.escape(gameID), function(eroare, resultate) {
  2018. if(eroare) throw eroare;
  2019.  
  2020. if(resultate[0].ctp)
  2021. {
  2022. var calculare = 10/100*resultate[0].ctp;
  2023. var Gap01 = resultate[0].ctp - calculare;
  2024. var Gap02 = resultate[0].ctp + calculare;
  2025.  
  2026. if(allprices <= Gap01 || allprices >= Gap02)
  2027. {
  2028. socket.emit('message', {
  2029. type: 'msg',
  2030. tip: 'error',
  2031. msg: 'Error: Minimum amount required: $' + Gap01 + ' or total amount required: $' + Gap02
  2032. });
  2033. createnow = 0;
  2034. return;
  2035. }
  2036. }
  2037. else
  2038. {
  2039. socket.emit('message', {
  2040. type: 'msg',
  2041. tip: 'error',
  2042. msg: 'Error: Invalid game!'
  2043. });
  2044. createnow = 0;
  2045. return;
  2046. }
  2047. socket.emit('message', {
  2048. type: 'modals',
  2049. tip: 'trade',
  2050. result: 'offerProcessing'
  2051. });
  2052. setTimeout(function() {
  2053. ET.ITrade.SendOfferToSteamId({steam_id: results1[0].steamid, items_to_receive: assetids.join(','), message: "Code: "+cod}, (err, body) => {
  2054. if(err != null || body.status != 1) {
  2055. logger.error(body);
  2056. socket.emit('message', {
  2057. type: 'msg',
  2058. tip: 'error',
  2059. msg: 'ERROR: Error on send offer, try again!'
  2060. });
  2061. return;
  2062. } else {
  2063. var offer = body.response.offer;
  2064. var useritems = offer.recipient.items;
  2065. useritems.forEach( function(item){
  2066. skinImages.push(item.image['300px']);
  2067. skinNames.push(item.name);
  2068. skinColors.push(item.color);
  2069. skinPrices.push(item.suggested_price / 100);
  2070. });
  2071.  
  2072. pool.query('UPDATE games SET scode = ' + pool.escape(cod) + ' WHERE id = ' + pool.escape(gameID));
  2073. var Skinimages = skinImages.join(',');
  2074. var Skinnames = skinNames.join(',');
  2075. var Skinprices = skinPrices.join(',');
  2076.  
  2077.  
  2078.  
  2079. socket.emit('message', {
  2080. type: 'modals',
  2081. tip: 'trade',
  2082. result: 'offerSend',
  2083. tid: offer.id,
  2084. code: cod
  2085. });
  2086.  
  2087.  
  2088.  
  2089.  
  2090. pool.query('SELECT hash FROM games WHERE id = ' + pool.escape(gameID), function(err1, res1) {
  2091. if(err1) throw err1;
  2092. console.log('Joined game #' + gameID + ', player steamid: ' + results1[0].steamid + ' (' + results1[0].name + ')');
  2093. pool.query('UPDATE `games` SET `psteamid` = ' + pool.escape(results1[0].steamid) + ', `pname` = ' + pool.escape(results1[0].name) + ', `pavatar` = ' + pool.escape(results1[0].avatar) + ', `trade_token` = ' + pool.escape(offer.id) + ', `pskinsurl` = ' + pool.escape(Skinimages) + ', `pskinsnames` = ' + pool.escape(Skinnames) + ', `pskinsprices` = ' + pool.escape(Skinprices) + ', `pskins` = ' + pool.escape(assetids.length) + ', `pcolors` = ' + pool.escape(skinColors.join(',')) + ', `ptp` = ' + pool.escape(allprices) + ', `trade_token` = ' + pool.escape(offer.id) + ' WHERE `id` = ' + pool.escape(gameID));
  2094. loadAllGames();
  2095. sendGames(gameID);
  2096. });
  2097.  
  2098. setTimeout(function() {
  2099. cancelOffer(offer.id);
  2100. }, 92000);
  2101.  
  2102. }
  2103.  
  2104. });
  2105. }, 1000);
  2106. });
  2107. }
  2108. });
  2109. });
  2110. }
  2111. });
  2112. });
  2113. }
  2114. else
  2115. {
  2116. socket.emit('message', {
  2117. type: 'msg',
  2118. tip: 'error',
  2119. msg: 'Error: This game does not exists!'
  2120. });
  2121. }
  2122. });
  2123. });
  2124. });
  2125.  
  2126. function hideGame(gameID)
  2127. {
  2128. pool.query('UPDATE games SET `ended` = 1 WHERE `id` = ' + pool.escape(gameID));
  2129. loadAllGames();
  2130. setTimeout(function() {
  2131. io.sockets.emit('message', {
  2132. type: 'removeGame',
  2133. id: gameID
  2134. });
  2135. }, 1000);
  2136. }
  2137.  
  2138. /*
  2139. Offer handling
  2140. */
  2141. function isInArray(value, array) {
  2142. return array.indexOf(value) > -1;
  2143. }
  2144.  
  2145. function pickJackpotWinner()
  2146. {
  2147. var random = new RandomOrg({ apiKey: '247cad8b-a4ef-4559-bdb9-c6270bf48d36' });
  2148. random.generateIntegers({ min: 0, max: jackpotTickets-1, n: 1 })
  2149. .then(function(result) {
  2150. var winTicket = result.random.data;
  2151. if(pickWinner == true) {
  2152. for(var x = 0; x < jackpotTotalTickets.length; x++) {
  2153. if(jackpotTotalTickets[x]['user'] == pickSteamID) {
  2154. winTicket = x;
  2155. break;
  2156. }
  2157. }
  2158. }
  2159. var winTicket1 = Math.round(winTicket)+1;
  2160. var secondsRotate = 14000;
  2161. var winSteamid;
  2162. var avatarWin;
  2163. var nameWin;
  2164. var isAdded = [];
  2165. var winnerInfo = [];
  2166. var ticketsMatt = [];
  2167. winSteamid = jackpotTotalTickets[winTicket]['user'];
  2168. pool.query('SELECT name, avatar FROM users WHERE steamid = ' + pool.escape(winSteamid), function(e, r) {
  2169. if(e) {logger.error(e); return;}
  2170. if(r.length == 0) {logger.error('SELECT ticketname.'); return;}
  2171. avatarWin = r[0].avatar;
  2172. nameWin = r[0].name;
  2173. winnerInfo.push({
  2174. "avatar": avatarWin,
  2175. "name": nameWin,
  2176. "steamid": winSteamid,
  2177. "chance": parseFloat(100 - ((totalJackpotValue-usersPrices[winSteamid])/totalJackpotValue)*100).toFixed(2),
  2178. "pot": totalJackpotValue,
  2179. "secret": jackpotSecret
  2180. });
  2181.  
  2182. var users_avatars_pot = [];
  2183. setTimeout(function() {
  2184. pool.query('UPDATE jgames SET pot = ' + pool.escape(parseFloat(totalJackpotValue).toFixed(2)) + ', items = ' + pool.escape(totalJackpotItems) + ', tickets = ' + pool.escape(jackpotTickets) + ', winnerTicket = ' + pool.escape(winTicket1) + ', ended = 1 WHERE id = ' + pool.escape(jackpotRound));
  2185. }, 14000);
  2186. pool.query("SELECT * FROM jbets WHERE jid = " + jackpotID + "", function (err, results, fields) {
  2187. var users = [];
  2188. var items = [];
  2189. results.forEach(function(result) {
  2190. var chance = 100 - ((totalJackpotValue - result['value'])/totalJackpotValue)*100;
  2191. var bet_items = result['assetids'].split(',');
  2192. for(var y = 1; y < Math.round(chance); y++) {
  2193. getUserDetail(result['user'], 'Avatar', function(data) {
  2194. users.push({
  2195. avatar: data,
  2196. chance: chance,
  2197. steam_id: result['user']
  2198. });
  2199. });
  2200. }
  2201. bet_items.forEach(function(item) {
  2202. items.push(item);
  2203. });
  2204. });
  2205. ET.IItem.GetItemsById({item_id: items.join(',')}, (err, body2) => {
  2206. if(err != null || body2.status != 1) {
  2207. logger.error(body2);
  2208. } else {
  2209. var itms = body2.response.items;
  2210. var winner_items = [];
  2211. itms.forEach(function(itm) {
  2212. winner_items.push({
  2213. name: itm.name,
  2214. price: itm.suggested_price,
  2215. image: itm.image['300px'],
  2216. color: itm.color
  2217. });
  2218. });
  2219. setTimeout(function() {
  2220. pool.query("SELECT hash FROM jgames WHERE id = " + jackpotID + "", function (err, result5, fields) {
  2221. io.sockets.emit('message', {
  2222. type: 'spinJackpot',
  2223. seconds: secondsRotate,
  2224. users: users,
  2225. winner: winnerInfo[0],
  2226. items: winner_items,
  2227. hhash: result5[0].hash
  2228. });
  2229. });
  2230. setTimeout(function() {
  2231. pool.query('UPDATE jgames SET winnerItems = ' + pool.escape(JSON.stringify(winner_items)) + ', winnerInfo = ' + pool.escape(JSON.stringify(winnerInfo[0])) + ' WHERE id = ' + jackpotID);
  2232. pool.query("SELECT * FROM jbets WHERE jid = " + jackpotID + "", function (err, result1, fields) {
  2233. var itemsToSend = [];
  2234. result1.forEach(function(result2){
  2235. var new_items = result2.assetids.split(',');
  2236.  
  2237. for(var i in new_items) {
  2238. itemsToSend.push(new_items[i]);
  2239. }
  2240. });
  2241. sendJackpotItems(winSteamid, itemsToSend, nameWin);
  2242. });
  2243. }, secondsRotate+1000);
  2244.  
  2245. setTimeout(function() {
  2246. nextJackpotRound();
  2247. }, parseInt(secondsRotate+5000));
  2248. }, 1000);
  2249. }
  2250. });
  2251. });
  2252. });
  2253. });
  2254. }
  2255.  
  2256.  
  2257. function sendJackpotItems(steamid, items, name)
  2258. {
  2259. var cod = makeCode();
  2260. ET.IUser.GetInventory({sort: 6, per_page: 500, page: 1}, (err, body) => {
  2261. var itemsDB = [];
  2262. var Items = [];
  2263. if(err != null || body.status != 1) {
  2264. logger.error(body);
  2265. } else {
  2266. var myitems = body.response.items;
  2267.  
  2268. var ItemsRake = [];
  2269. for(var i in items){
  2270. myitems.forEach(function(item) {
  2271. if(items[i] == item.id) {
  2272. Items.push({
  2273. price: item.suggested_price / 100,
  2274. id: item.id
  2275. });
  2276. return;
  2277. }
  2278. });
  2279. }
  2280.  
  2281. var comission = jackpotPRake/100*(totalJackpotValue - (usersPrices[steamid]/2));
  2282. for(var i in Items)
  2283. {
  2284. if(Items[i]['price'] <= parseFloat(comission).toFixed(2))
  2285. {
  2286. comission -= Items[i]['price'];
  2287. ItemsRake.push(Items[i]['id']);
  2288. Items[i].remove = 1;
  2289. }
  2290. }
  2291.  
  2292. for(var i in Items)
  2293. {
  2294. if(Items[i].remove != 1)
  2295. {
  2296. itemsDB.push(Items[i]['id']);
  2297. }
  2298. }
  2299. setTimeout(function() {
  2300. ET.ITrade.SendOfferToSteamId({steam_id: steamid, items_to_send: itemsDB.join(','), message: 'Your winnings from game #' + jackpotRound + '. Reference code: ' + cod}, (err, body1) => {
  2301. if(err != null || body1.status != 1) {
  2302. pool.query('INSERT INTO trades SET user = ' + pool.escape(steamid) + ', tid = ' + pool.escape(offer.id) + ', status = ' + pool.escape('Cancelled') + ', action = ' + pool.escape('Winning') + ', code = ' + pool.escape(cod) + ', items = ' + pool.escape(itemsDB.join(',')));
  2303. logger.error(body1);
  2304. } else {
  2305. var offer = body1.response.offer;
  2306. console.log('[Winner-jackpot: ' + steamid + ' (' + name + ') ] Offer #' + offer.id);
  2307.  
  2308.  
  2309.  
  2310. }
  2311. });
  2312. },1000);
  2313. if(ItemsRake.length > 0) {
  2314. ET.ITrade.SendOfferToSteamId({steam_id: Ownerid, items_to_send: ItemsRake.join(','), message: 'Your comission from game #' + jackpotRound + '. Reference code: ' + cod});
  2315. }
  2316. }
  2317. });
  2318. }
  2319.  
  2320.  
  2321.  
  2322.  
  2323. function shuffle(array) {
  2324. var currentIndex = array.length, temporaryValue, randomIndex;
  2325. while (0 !== currentIndex) {
  2326. randomIndex = Math.floor(Math.random() * currentIndex);
  2327. currentIndex -= 1;
  2328. temporaryValue = array[currentIndex];
  2329. array[currentIndex] = array[randomIndex];
  2330. array[randomIndex] = temporaryValue;
  2331. }
  2332. return array;
  2333. }
  2334.  
  2335. function sendItemsTrade(offer_check, link, winner)
  2336. {
  2337. pool.query('SELECT id,cskinsnames,pskinsnames,winner,csteamid,psteamid,cname,pname,cskinsprices,pskinsprices,ctp,ptp,cassetids,passetids FROM games WHERE trade_token = ' + pool.escape(offer_check.id), function(err, res) {
  2338. if(err) throw err;
  2339.  
  2340. setTimeout(function() {
  2341. hideGame(res[0].id);
  2342. }, 120 * 1000);
  2343.  
  2344. var Items = [];
  2345.  
  2346. var Skins1Names = res[0].cskinsnames.split(',');
  2347. var Skins2Names = res[0].pskinsnames.split(',');
  2348. var TotalSkinsNames = Skins1Names.concat(Skins2Names);
  2349.  
  2350. var Skins1 = res[0].cassetids.split(',');
  2351. var Skins2 = res[0].passetids.split(',');
  2352. var allSkins = Skins1.concat(Skins2);
  2353.  
  2354. var Prices1 = res[0].cskinsprices.split(',');
  2355. var Prices2 = res[0].pskinsprices.split(',');
  2356. var allPrices = Prices1.concat(Prices2);
  2357.  
  2358. var partner;
  2359.  
  2360. if(winner == 1)
  2361. {
  2362. partner = res[0].csteamid;
  2363. }
  2364. else if(winner == 2)
  2365. {
  2366. partner = res[0].psteamid;
  2367. }
  2368.  
  2369. for(var i in allSkins)
  2370. {
  2371. Items.push({
  2372. assetid: allSkins[i],
  2373. price: allPrices[i]
  2374. });
  2375. }
  2376. var sendItems = [];
  2377. var ItemsRake = [];
  2378.  
  2379. var comission = percentRake/100 * (res[0].ctp + res[0].ptp);
  2380. for(var i in Items)
  2381. {
  2382. if(Items[i]['price'] <= comission)
  2383. {
  2384. comission -= Items[i]['price'];
  2385. ItemsRake.push(Items[i]['assetid']);
  2386. Items[i].remove = 1;
  2387. }
  2388. }
  2389.  
  2390. for(var i in Items)
  2391. {
  2392. if(Items[i].remove != 1) {
  2393. sendItems.push(Items[i]['assetid']);
  2394. }
  2395. }
  2396. var cod = makeCode();
  2397. setTimeout(function()
  2398. {
  2399. ET.ITrade.SendOfferToSteamId({steam_id: partner, items_to_send: sendItems.join(','), message: 'Code: '+cod}, (err, body1) => {
  2400. if(err != null || body1.status != 1)
  2401. {
  2402. logger.error(body1);
  2403. return;
  2404. }
  2405. else
  2406. {
  2407. var offer = body1.response.offer;
  2408. var WSteamid;
  2409. var WName;
  2410. pool.query('UPDATE games SET sentItems = 1, wcode = ' + pool.escape(cod) + ' WHERE trade_token = ' + pool.escape(offer.id));
  2411. if(winner == 1)
  2412. {
  2413. WSteamid = res[0].csteamid;
  2414. WName = res[0].cname;
  2415. }
  2416. else if(winner == 2)
  2417. {
  2418. WSteamid = res[0].psteamid;
  2419. WName = res[0].pname;
  2420. }
  2421. console.log('[Winner: ' + WSteamid + ' (' + WName + ') ] Offer #' + offer.id + " " + offer.state);
  2422.  
  2423.  
  2424. }
  2425. });
  2426. }, 1000);
  2427. if(ItemsRake.length > 0) {
  2428. ET.ITrade.SendOfferToSteamId({steam_id: Ownerid, items_to_send: ItemsRake.join(','), message: 'Coinflip Comission'}, (err, body5) => {
  2429. if(body5.status != 1) {
  2430. console.log('ERROR on Send Offer');
  2431. logger.error(body5);
  2432. }
  2433. });
  2434. }
  2435. loadAllGames();
  2436. sendGames(res[0].id);
  2437.  
  2438. setTimeout(function() {
  2439. loadStatistics();
  2440. }, 5000);
  2441. });
  2442. }
  2443.  
  2444.  
  2445. //Refresh polldata.json
  2446.  
  2447. function time()
  2448. {
  2449. return parseInt(new Date().getTime()/1000);
  2450. }
  2451.  
  2452. function addHistory(socket)
  2453. {
  2454. chatMessages.forEach(function(itm) {
  2455. socket.emit('message', {
  2456. type: 'addMessage',
  2457. msg: itm.message,
  2458. avatar: itm.avatar,
  2459. steamid: itm.steamid,
  2460. rank: itm.rank,
  2461. hide: itm.hide,
  2462. level: itm.level,
  2463. name: itm.name
  2464. });
  2465. })
  2466. }
  2467.  
  2468. function makeCode() {
  2469. var text = "";
  2470. var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  2471.  
  2472. for(var i=0; i < 6; i++)
  2473. text += possible.charAt(Math.floor(Math.random() * possible.length));
  2474.  
  2475. return text;
  2476. }
  2477.  
  2478. function makeHash()
  2479. {
  2480. var text = "";
  2481. var possible = "abcdefghijlmnopqrstu0123456789";
  2482.  
  2483. for(var i=0; i < 32; i++)
  2484. text += possible.charAt(Math.floor(Math.random() * possible.length));
  2485.  
  2486. return text;
  2487. }
  2488.  
  2489. function makeSecret()
  2490. {
  2491. var text = "";
  2492. var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  2493.  
  2494. for(var i=0; i < 8; i++)
  2495. text += possible.charAt(Math.floor(Math.random() * possible.length));
  2496.  
  2497. return text;
  2498. }
  2499.  
  2500. function getProxy()
  2501. {
  2502. return "https://" + proxies[random(0,proxies.length-1)];
  2503. }
  2504.  
  2505. function random(min, max) {
  2506. return Math.floor(Math.random() * (max - min + 1)) + min;
  2507. }
  2508.  
  2509. function getInv(user, socket, tipo)
  2510. {
  2511. ET.ITrade.GetUserInventoryFromSteamId({steam_id: encodeURIComponent(user), sort: 6, per_page: 500, page: 1}, (err, body) => {
  2512. if(err != null || body.status != 1) {
  2513. throw err;
  2514. return;
  2515. }
  2516. var items = body.response.items;
  2517.  
  2518. var counter = 0;
  2519.  
  2520. var idss = [];
  2521. var namess = [];
  2522. var pricess = [];
  2523. var imgss = [];
  2524. var colorss = [];
  2525.  
  2526. var Ids = '';
  2527. var Names = '';
  2528. var Prices = '';
  2529. var Imgs = '';
  2530. var Colors = '';
  2531. if(!items) return;
  2532.  
  2533. items.forEach(function(value) {
  2534. var id = value.id;
  2535. var name = value.name;
  2536. var price = value.suggested_price / 100;
  2537. var img = value.image['300px'];
  2538. var color = value.color;
  2539.  
  2540. if(price >= minDep) {
  2541. idss.push(id);
  2542. namess.push(name);
  2543. pricess.push(price);
  2544. imgss.push(img);
  2545. colorss.push(color);
  2546. }
  2547. });
  2548. Ids = idss.join(',');
  2549. Names = namess.join(',');
  2550. Prices = pricess.join(',');
  2551. Imgs = imgss.join(',');
  2552. Colors = colorss.join(',');
  2553.  
  2554. socket.emit('message', {
  2555. type: tipo,
  2556. id: Ids,
  2557. name: Names,
  2558. price: Prices,
  2559. img: Imgs,
  2560. color: Colors
  2561. });
  2562. inventoryUser[user] = {
  2563. id: Ids,
  2564. name: Names,
  2565. price: Prices,
  2566. img: Imgs,
  2567. color: Colors
  2568. }
  2569. });
  2570. }
  2571.  
  2572.  
  2573. function loadStatistics(socket)
  2574. {
  2575. var totalAmount = 0;
  2576. var totalItems = 0;
  2577. var activeGames = 0;
  2578.  
  2579. pool.query('SELECT SUM(`ctp`) AS `totalAmount`, SUM(`cskins`) AS `totalItems`, COUNT(`id`) AS `activeGames` FROM games WHERE `winner` = -1', function(error, res) {
  2580. if(error) throw error;
  2581.  
  2582. if(res.length == 0)
  2583. {
  2584. totalAmount = 0;
  2585. totalItems = 0;
  2586. activeGames = 0;
  2587.  
  2588. if(!socket)
  2589. {
  2590. io.sockets.emit('message', {
  2591. type: 'loadStatistics',
  2592. totalAmount: totalAmount,
  2593. totalItems: totalItems,
  2594. activeGames: activeGames
  2595. });
  2596. }
  2597. else
  2598. {
  2599. socket.emit('message', {
  2600. type: 'loadStatistics',
  2601. totalAmount: totalAmount,
  2602. totalItems: totalItems,
  2603. activeGames: activeGames
  2604. });
  2605. }
  2606. }
  2607.  
  2608. if(res.length > 0)
  2609. {
  2610. totalAmount = res[0].totalAmount;
  2611. totalItems = res[0].totalItems;
  2612. activeGames = res[0].activeGames;
  2613.  
  2614. if(totalAmount == null)
  2615. {
  2616. totalAmount = 0;
  2617. }
  2618. if(totalItems == null)
  2619. {
  2620. totalItems = 0;
  2621. }
  2622. if(activeGames == null)
  2623. {
  2624. activeGames = 0;
  2625. }
  2626.  
  2627. if(!socket)
  2628. {
  2629. io.sockets.emit('message', {
  2630. type: 'loadStatistics',
  2631. totalAmount: totalAmount,
  2632. totalItems: totalItems,
  2633. activeGames: activeGames
  2634. });
  2635. }
  2636. else
  2637. {
  2638. socket.emit('message', {
  2639. type: 'loadStatistics',
  2640. totalAmount: totalAmount,
  2641. totalItems: totalItems,
  2642. activeGames: activeGames
  2643. });
  2644. }
  2645. }
  2646. });
  2647. }
  2648.  
  2649. function sendGames(gameID)
  2650. {
  2651. setTimeout(function() {
  2652. for(var i in loadGames)
  2653. {
  2654. if(loadGames[i].id == gameID)
  2655. {
  2656. timerGame[loadGames[i].id] = time()+90;
  2657.  
  2658. io.sockets.emit('message', {
  2659. type: 'editGame',
  2660. games: {
  2661. 'id': loadGames[i].id,
  2662. 'csteamid': loadGames[i].csteamid,
  2663. 'cname': loadGames[i].cname,
  2664. 'cavatar': loadGames[i].cavatar,
  2665. 'cskinsurl': loadGames[i].cskinsurl,
  2666. 'cskinsnames': loadGames[i].cskinsnames,
  2667. 'cskinsprices': loadGames[i].cskinsprices,
  2668. 'ccolors': loadGames[i].ccolors,
  2669. 'cskins': loadGames[i].cskins,
  2670. 'ctp': loadGames[i].ctp,
  2671. 'psteamid': loadGames[i].psteamid,
  2672. 'pname': loadGames[i].pname,
  2673. 'pavatar': loadGames[i].pavatar,
  2674. 'pskinsurl': loadGames[i].pskinsurl,
  2675. 'pskinsnames': loadGames[i].pskinsnames,
  2676. 'pskinsprices': loadGames[i].pskinsprices,
  2677. 'pcolors': loadGames[i].pcolors,
  2678. 'pskins': loadGames[i].pskins,
  2679. 'ptp': loadGames[i].ptp,
  2680. 'hash': loadGames[i].hash,
  2681. 'secret': loadGames[i].secret,
  2682. 'winner': loadGames[i].winner,
  2683. 'timer': timerGame[loadGames[i].id]-time(),
  2684. 'timer11': loadGames[i].timer11,
  2685. 'ttimer11': timer11Game[loadGames[i].id]-time(),
  2686. }
  2687. });
  2688.  
  2689. io.sockets.emit('message', {
  2690. type: 'watchCF',
  2691. id: loadGames[i].id,
  2692. csteamid: loadGames[i].csteamid,
  2693. cname: loadGames[i].cname,
  2694. cavatar: loadGames[i].cavatar,
  2695. cskinsurl: loadGames[i].cskinsurl,
  2696. cskinsnames: loadGames[i].cskinsnames,
  2697. ccolors: loadGames[i].ccolors,
  2698. cskinsprices: loadGames[i].cskinsprices,
  2699. cskins: loadGames[i].cskins,
  2700. ctp: loadGames[i].ctp,
  2701. psteamid: loadGames[i].psteamid,
  2702. pname: loadGames[i].pname,
  2703. pcolors: loadGames[i].pcolors,
  2704. pavatar: loadGames[i].pavatar,
  2705. pskinsurl: loadGames[i].pskinsurl,
  2706. pskinsnames: loadGames[i].pskinsnames,
  2707. pskinsprices: loadGames[i].pskinsprices,
  2708. pskins: loadGames[i].pskins,
  2709. ptp: loadGames[i].ptp,
  2710. hash: loadGames[i].hash,
  2711. secret: loadGames[i].secret,
  2712. winner: loadGames[i].winner,
  2713. timer: timerGame[loadGames[i].id]-time(),
  2714. timer11: loadGames[i].timer11,
  2715. ttimer11: timer11Game[loadGames[i].id]-time(),
  2716. gameNumber: loadGames[i].id
  2717. });
  2718. }
  2719. }
  2720. }, 1000);
  2721. }
  2722.  
  2723. function LevelCalculate(user)
  2724. {
  2725. pool.query('SELECT xp,level FROM users WHERE steamid = ' + pool.escape(user), function(err, row) {
  2726. if(err) throw err;
  2727. if(row.length == 0) return;
  2728.  
  2729. var currentLevel = row[0].level;
  2730.  
  2731. var currentXp = row[0].xp;
  2732. var xpNeeded = 0;
  2733. var xpMinus = 0;
  2734.  
  2735. for(var i = 1; i < 500; i++)
  2736. {
  2737. xpNeeded += 40 * i;
  2738. xpMinus = xpNeeded - (40 * i-1);
  2739. if(currentXp >= xpMinus && currentXp <= xpNeeded)
  2740. {
  2741. pool.query('UPDATE users SET level = ' + pool.escape(i) + ' WHERE steamid = ' + pool.escape(user));
  2742. }
  2743. }
  2744. });
  2745. }
  2746.  
  2747. function getRandomFloat(min, max) {
  2748. return (Math.random() * (max - min) + min).toFixed(10);
  2749. }
  2750.  
  2751. function handleDisconnect() {
  2752. pool = mysql.createConnection(db_config);
  2753.  
  2754. pool.connect(function(err) {
  2755. if(err) {
  2756. logger.trace('Error: Connecting to database: ', err);
  2757. setTimeout(handleDisconnect, 2000);
  2758. }
  2759. });
  2760.  
  2761. pool.on('error', function(err) {
  2762. logger.trace('Error: Database error: ', err);
  2763. if(err.code === 'PROTOCOL_CONNECTION_LOST') {
  2764. handleDisconnect();
  2765. } else {
  2766. throw err;
  2767. }
  2768. });
  2769. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement