Guest User

Untitled

a guest
Feb 3rd, 2021
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 221.95 KB | None | 0 0
  1. var fs = require('fs');
  2. var crypto = require('crypto');
  3. var request = require('request');
  4. var log4js = require('log4js');
  5. var sha256 = require('sha256');
  6. var express = require('express');
  7. var randomMath_questions = require('random-math-question');
  8. var randomWord = require('random-word');
  9. var config = require('./config.js');
  10. var options = {
  11. key: fs.readFileSync('echo.key'),
  12. cert: fs.readFileSync('echo.crt'),
  13. requestCert: false
  14. };
  15. var app = express();
  16. var server = require('http').createServer(app);
  17. var io = require('socket.io').listen(server);
  18. server.listen(6969, '0.0.0.0');
  19. var ExpressTrade = require('expresstrade');
  20.  
  21. var ET = new ExpressTrade({
  22. apikey: config.vgo_api_key,
  23. twofactorsecret: config.secret,
  24. pollInterval: config.poll_interval
  25. });
  26.  
  27. log4js.configure({
  28. appenders: {
  29. console: {
  30. type: 'console'
  31. },
  32. default: {
  33. type: 'file',
  34. filename: 'logs/main_'+time()+'.log'
  35. }
  36. },
  37. categories: {
  38. default: {
  39. appenders: ['default', 'console'],
  40. level: 'trace'
  41. }
  42. }
  43. });
  44. var logger = log4js.getLogger();
  45.  
  46. var mysql = require('mysql');
  47. var db_config = {
  48. host: config.sql.host,
  49. user: config.sql.user,
  50. password: config.sql.password,
  51. database: config.sql.database
  52. };
  53. var pool;
  54.  
  55. check_errors();
  56. database_connection();
  57.  
  58. //global vars
  59. var socketids = {};
  60. var sockets = {};
  61. var ssockets = {};
  62. var users = {};
  63. var chat_msgs = [];
  64. var anti_spam_chat = {};
  65. var tokens = {};
  66. var users_inventory = {};
  67. var website_inventory = [];
  68. var website_inv_raffles = [];
  69. var items_gone = [];
  70. var pending_deposit = {};
  71. var pending_withdraw = {};
  72. var pending_raffle = {};
  73. var user_pending_deposit = {};
  74. var user_pending_withdraw = {};
  75. //global vars
  76.  
  77. // roulette
  78. var currentMode = 'NONE';
  79. var betsUsers = {};
  80. var currentBets = [];
  81. var currentTimer = 200;
  82. var currentLastNumber = -1;
  83. var currentLastWooble = -1;
  84. var currentHash = "";
  85. var currentSecret = "";
  86. var currentLottery = "";
  87. var lastRolls = [];
  88. var allLastRolls = [];
  89. var minBet = 10;
  90. var maxBet = 5000000;
  91. var roulette_bet_color = {};
  92. //
  93.  
  94. var Games_Work = true;
  95.  
  96. var AdminMode = {};
  97. var antispam_user = {};
  98.  
  99. // CHAT MESSAGES
  100. var id_chat_msgs = 0;
  101. // CHAT MESSAGES
  102.  
  103. // PROMOTIONAL CODES
  104. var Promotional_codes = {};
  105. // PROMOTIONAL CODES
  106.  
  107. // Anti spam ENDPOINTS
  108. var anti_spam_endpoints = {};
  109. // Anti spam ENDPOINTS
  110.  
  111. // WITHDRAW
  112. var Withdraw_disabled = false;
  113. // WITHDRAW
  114.  
  115. // RAFFLES AUTO GENERATION
  116. var GenerationRaffles = {
  117. 'skins': {},
  118. 'coins': {}
  119. };
  120. // RAFFLES AUTO GENERATION
  121.  
  122.  
  123. //init
  124. getLastRolls();
  125. getAllLastRolls();
  126. startRoulette();
  127. //
  128.  
  129. var Chat_disabled = false;
  130.  
  131.  
  132.  
  133. // raffles
  134. var Raffles = {
  135. List: {},
  136. Prizes: {},
  137. Prizess: {},
  138. WinnerSecret: {},
  139. Tipul: {},
  140. Joined: {},
  141. Colors: [
  142. '#F52222',
  143. '#FF03FF',
  144. '#8D03FF',
  145. '#0303FF',
  146. '#03C4FF',
  147. '#03F2FF',
  148. '#03FF96',
  149. '#22D628',
  150. '#75F50C',
  151. '#D6F50C',
  152. '#E0C71F',
  153. '#FF6A00'
  154. ]
  155. };
  156. resumeRaffles();
  157. // raffles
  158.  
  159. // chat code
  160. var ChatCodes = {
  161. code: null,
  162. prize: null,
  163. max_users: null,
  164. users: []
  165. };
  166. // chat code
  167.  
  168. // math code
  169. var MathCodes = {
  170. question: null,
  171. answer: null,
  172. prize: null,
  173. max_users: null,
  174. users: []
  175. }
  176. // math code
  177.  
  178. // first to write
  179. var FTWrite = {
  180. text: null,
  181. prize: null,
  182. enabled: false
  183. };
  184. // first to write
  185.  
  186. // Pinned message
  187. var Pinned_msg = {
  188. default: config.default_pinned_msg,
  189. currently: null,
  190. last: null
  191. };
  192. //
  193.  
  194. //
  195. var Useri_IP = {};
  196. var ips = {};
  197. //
  198.  
  199. // rain coins
  200. var Rain = {
  201. enabled: false,
  202. interval: null,
  203. time: null,
  204. total_coins: 0,
  205. users_min: 5,
  206. coins_per_user_5: 10,
  207. coins_per_user_20: 20,
  208. coins_per_user_60: 40,
  209. coins_per_user_100: 60,
  210. time_to_wait: 0.75, // MINUTES
  211. time_to_rain: 0, // MINUTES
  212. users_joined: []
  213. };
  214. startRain();
  215. // rain coins
  216.  
  217. var JmekWeek = false;
  218.  
  219. function startRain(timpul) {
  220. if(timpul > 0) var random_time = timpul;
  221. else var random_time = Math.floor(Math.random()*(10-3+1)+3);
  222. Rain.time_to_rain = random_time;
  223.  
  224. Rain.enabled = false;
  225. Rain.interval = null;
  226. Rain.total_coins = 0;
  227. Rain.users_joined = [];
  228. Rain.time = time();
  229.  
  230. logger.info('Rain will start in ' + random_time + ' minutes, if users online will be more than ' + Rain.users_min +'.');
  231.  
  232. Rain.interval = setInterval(function() {
  233. if(Rain.enabled == false) {
  234. var users = Object.keys(ips).length;
  235.  
  236. if(users > Rain.users_min) {
  237. clearInterval(Rain.interval);
  238. Rain.enabled = true;
  239.  
  240. Rain.time = time();
  241.  
  242. logger.info('Rain has started!');
  243.  
  244. var $html = `
  245. <p>COIN RAIN IS LIVE!</p>
  246. <div id="join_rain" class="btn btn-sm btn-danger">JOIN RAIN</div>
  247. `;
  248. io.sockets.emit('user rain show', $html);
  249.  
  250. setTimeout(function() {
  251. stopRain();
  252. }, Rain.time_to_wait*60000);
  253. } else {
  254. Rain.time_to_rain = 5;
  255. logger.info('There was not enough players for rain to start. The rain will start in 5 minutes if users online will be more than ' + Rain.users_min + '.');
  256. clearInterval(Rain.interval);
  257. startRain(Rain.time_to_rain);
  258. }
  259. }
  260. }, Rain.time_to_rain*60000);
  261. }
  262.  
  263. function stopRain() {
  264. logger.info('Rain has ended!');
  265.  
  266. var total_users_joined = Rain.users_joined.length;
  267.  
  268. for(var i = 0; i < total_users_joined; i++) {
  269. if(total_users_joined >= 1 && total_users_joined < 5) Rain.total_coins += Rain.coins_per_user_5;
  270. else if(total_users_joined >= 5 && total_users_joined < 60) Rain.total_coins += Rain.coins_per_user_20;
  271. else if(total_users_joined >= 60 && total_users_joined < 100) Rain.total_coins += Rain.coins_per_user_60;
  272. else if(total_users_joined >= 100) Rain.total_coins += Rain.coins_per_user_100;
  273. }
  274.  
  275. var coins_per_user = parseInt(parseInt(Rain.total_coins)/parseInt(total_users_joined));
  276.  
  277. // MAXIMUM COINS PER USER IS 1K ($1)
  278. if(coins_per_user >= 1000) coins = 1000;
  279.  
  280. if(JmekWeek == true) coins_per_user = coins_per_user*2;
  281.  
  282. for(var h in Rain.users_joined) {
  283. var user = Rain.users_joined[h];
  284. pool.query('UPDATE users SET balance = balance + ' + pool.escape(coins_per_user) + ' WHERE steamid = ' + pool.escape(user), function(er, ro) {
  285.  
  286. });
  287.  
  288. addLog(user, 'rain_ended', '+' + coins_per_user, 'Received ' + coins_per_user + ' from Rain!', function() {
  289.  
  290. });
  291.  
  292. var socketul = ssockets[user];
  293. if(io.sockets.connected[socketul]) io.sockets.connected[socketul].emit('user alerta', 'You have successfully received <b>' + coins_per_user + '</b> coins from the Rain!', 'balance');
  294. }
  295.  
  296. var $html = `
  297. <p>A total of <span style="font-weight: 500;">` + Rain.users_joined.length + `</span> users received <span style="font-weight: 500;">` + parseInt(Rain.total_coins) + `</span> coins.</p>
  298. `;
  299. io.sockets.emit('user rain show', $html);
  300.  
  301. setTimeout(function() {
  302. io.sockets.emit('user rain hide');
  303. }, 12500);
  304.  
  305. Rain.enabled = false;
  306. Rain.interval = null;
  307. Rain.total_coins = 0;
  308. Rain.users_joined = [];
  309. startRain();
  310. }
  311.  
  312. io.on('connection', function(socket) {
  313. socket.on('login', function(token) {
  314.  
  315. //console.log(socket.handshake.headers);
  316.  
  317. if(!ips.hasOwnProperty(socket.handshake.headers['x-forwarded-for'])) ips[socket.handshake.headers['x-forwarded-for']] = 1;
  318.  
  319. pool.query('SELECT steamid, name, ban, avatar, balance, rank, mute, available, aff, affs, wagered, wags, wwags, steam_level, deps, withs, withamount, can_withdraw, affamount, depamount, affcollected, dailygift, hourlygift, redeemed_code, last FROM users WHERE token = ' + pool.escape(token), function(err, row) {
  320. if(err) throw err;
  321. // not logged in
  322.  
  323. socketids[socket.id] = token;
  324. sockets[token] = socket.id;
  325. io.sockets.emit('website users online', Object.keys(ips).length);
  326. if(chat_msgs.length > 0) socket.emit('website chat history', chat_msgs, false);
  327.  
  328. currentBets.forEach(function(item) {
  329. socket.emit('roulette_newbet', item.bet, item.color, item.user, item.avatar, item.name);
  330. });
  331.  
  332. totalRollsAll(function(red, green, black) {
  333. socket.emit('roulette 100 rolls', red, green, black);
  334. });
  335.  
  336. socket.emit('roulette_addroll', lastRolls);
  337. // socket.emit('roulette_hash', currentHash);
  338. socket.emit('roulette_start', currentTimer, currentLastNumber, currentLastWooble, currentHash);
  339.  
  340. // not logged in
  341. if(row.length == 0) return;
  342.  
  343. if(row[0].ban == 1) {
  344. logger.error('User ' + row[0].steamid + ' (' + row[0].name + ') [banned] tried to connect to server, but kicked and logged out automatically!');
  345. pool.query('UPDATE users SET token = 0 WHERE steamid = ' + pool.escape(row[0].steamid), function(e,r) {
  346. socket.emit('user refresh');
  347. })
  348. return;
  349. }
  350.  
  351. //logged in
  352. users[token] = {
  353. steamid: row[0].steamid,
  354. name: row[0].name,
  355. avatar: row[0].avatar,
  356. balance: parseInt(row[0].balance),
  357. rank: row[0].rank,
  358. mute: row[0].mute,
  359. promocode: null,
  360. deps: row[0].deps,
  361. depamount: parseInt(row[0].depamount),
  362. aff: row[0].aff,
  363. affs: row[0].affs,
  364. withs: row[0].withs,
  365. withamount: parseInt(row[0].withamount),
  366. can_withdraw: row[0].can_withdraw,
  367. affamount: row[0].affamount,
  368. affcollected: row[0].affcollected,
  369.  
  370. available: parseInt(row[0].available),
  371. wagered: parseInt(row[0].wagered),
  372.  
  373. wags: parseInt(row[0].wags),
  374. wwags: parseInt(row[0].wwags),
  375.  
  376. dailygift: parseInt(row[0].dailygift),
  377. hourlygift: parseInt(row[0].hourlygift),
  378. redeemed_code: row[0].redeemed_code
  379. };
  380. tokens[row[0].steamid] = token;
  381. ssockets[row[0].steamid] = socket.id;
  382.  
  383. Useri_IP[socket.handshake.headers['x-forwarded-for']] = {
  384. name: users[token].name,
  385. steamid: users[token].steamid,
  386. avatar: users[token].avatar,
  387. rank: users[token].rank
  388. };
  389.  
  390. socket.emit('raffles add raffles', Raffles.List);
  391.  
  392. var $html = `
  393. <p>COIN RAIN IS LIVE!</p>
  394. <div id="join_rain" class="btn btn-sm btn-danger">JOIN RAIN</div>
  395. `;
  396. if(Rain.users_joined.indexOf(users[token].steamid) == -1 && Rain.enabled == true) socket.emit('user rain show', $html);
  397. else if(Rain.users_joined.indexOf(users[token].steamid) > -1 && Rain.enabled == true) {
  398. var $html = `
  399. <p>WAITING FOR PLAYERS TO JOIN...</p>
  400. `;
  401. socket.emit('user rain show', $html);
  402. }
  403.  
  404. if(Raffles.Prizess.hasOwnProperty(users[token].steamid)) {
  405. for(var z in Raffles.Prizess[users[token].steamid]) {
  406. var id = Raffles.Prizess[users[token].steamid][z];
  407. socket.emit('user raffle prize settings', id, id, Raffles.Prizes[id]);
  408. }
  409. }
  410.  
  411. if(users[token].redeemed_code != '') socket.emit('user aff code', users[token].redeemed_code);
  412.  
  413. if(Pinned_msg.currently != null) socket.emit('user pinned msg', Pinned_msg.currently);
  414.  
  415. if(users[token].promocode == null) {
  416. pool.query('SELECT code FROM codes WHERE user = ' + pool.escape(users[token].steamid), function(err, row) {
  417. if(row.length > 0) users[token].promocode = row[0].code;
  418.  
  419. pool.query('SELECT COUNT(id) AS depositors FROM users WHERE deps >= 1 AND aff = ' + pool.escape(users[token].steamid), function(ah, uh) {
  420. checkWebsiteLevel(token, function(level) {
  421. var $color = '';
  422.  
  423. if(level >= 0 && level <= 4) $color = '#919191';
  424. else if(level >= 5 && level <= 9) $color = '#2F65FA';
  425. else if(level >= 10) $color = '#FC3232';
  426.  
  427. users[token].xp_level = level;
  428. users[token].xp_color = $color;
  429. users[token].affdepositors = uh[0].depositors;
  430.  
  431. socket.emit('user info', users[token]);
  432.  
  433. socket.emit('user settings', 'dailygift', parseInt(parseInt(users[token].dailygift)-time()), getDailyReward(token));
  434. socket.emit('user settings', 'hourlygift', parseInt(parseInt(users[token].hourlygift)-time()));
  435. });
  436. });
  437. });
  438. }
  439.  
  440. var timp = row[0].last+43200;
  441.  
  442. if(timp-time() <= 0) {
  443. checkSteamLevel(row[0].steamid, function(level) {
  444. pool.query('UPDATE users SET steam_level = ' + pool.escape(level) + ', last = ' + pool.escape(time()) + ' WHERE token = ' + pool.escape(token), function(eee) {
  445. if(eee) return;
  446.  
  447. users[token].level = level;
  448. });
  449. });
  450. }
  451. });
  452. });
  453. //
  454.  
  455.  
  456.  
  457. var Minesweeper = {};
  458. var User_minesweeper = {};
  459.  
  460.  
  461. socket.on('mines', function(type, mtype, amount, token) {
  462. if(users.hasOwnProperty(token)) {
  463. if(type == "play") {
  464. var types = [1,3,5,24];
  465. var type_found = false;
  466. for(var i in types) {
  467. if(types[i] == mtype) type_found = true;
  468. }
  469.  
  470. if(type_found == false) return socket.emit('user eroare', 'This type is invalid!');
  471.  
  472. if(User_minesweeper.hasOwnProperty(users[token].steamid)) return socket.emit('user eroare', 'You are already in a game!');
  473.  
  474. if(amount > 0) {
  475. user_balance_check(token, function(er, bal) {
  476. if(bal < amount) return socket.emit('user eroare', 'You do not have enough balance to play mines!');
  477.  
  478. var hash;
  479. var all_tiles = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
  480. var bombs = [];
  481. var secret = makeSecret();
  482.  
  483. if(mtype == 1) bombs.push(Math.floor(Math.random() * (25 - 1 + 1)) + 1);
  484. else if(mtype == 3) {
  485. do {
  486. bombs[bombs.length] = all_tiles.splice(Math.floor(Math.random() * all_tiles.length), 1)[0];
  487. } while (bombs.length < 3);
  488. } else if(mtype == 5) {
  489. do {
  490. bombs[bombs.length] = all_tiles.splice(Math.floor(Math.random() * all_tiles.length), 1)[0];
  491. } while (bombs.length < 5);
  492. } else {
  493. do {
  494. bombs[bombs.length] = all_tiles.splice(Math.floor(Math.random() * all_tiles.length), 1)[0];
  495. } while (bombs.length < 24);
  496. }
  497.  
  498. hash = encrypt(secret, bombs.join('|'));
  499.  
  500. pool.query('UPDATE users SET balance = balance - ? WHERE token = ?', [amount, token], function(e,r) {
  501. if(e) throw e;
  502.  
  503. pool.query('INSERT INTO mines SET user = ?, bombs = ?, type = ?, amount = ?', [users[token].steamid, bombs.join('|'), mtype, amount], function(e, rr) {
  504. if(e) throw e;
  505.  
  506. user_balance_check(token, function(er, ball) {
  507. Minesweeper[rr.insertId] = {
  508. id: rr.insertId,
  509. user: users[token].steamid,
  510. hash: hash,
  511. secret: secret,
  512. bombs: bombs,
  513. type: mtype,
  514. amount: amount
  515. };
  516.  
  517. console.log(Minesweeper[rr.insertId]);
  518.  
  519. User_minesweeper[users[token].steamid] = rr.insertId;
  520.  
  521. socket.emit('mines', 'play', rr.insertId, hash);
  522.  
  523. socket.emit('user balance', ball);
  524. });
  525. });
  526. });
  527. });
  528. }
  529. } else if(type == "gettile") {
  530. var tile = mtype;
  531. var game = Minesweeper[amount];
  532. var tile_clicked_already = false;
  533. var bomb_checked = false;
  534.  
  535. if(User_minesweeper.hasOwnProperty(users[token].steamid)) {
  536. if(game.hasOwnProperty('tiles')) {
  537. for(var i in game.tiles) {
  538. if(game.tiles[i] == tile) tile_clicked_already = true;
  539. }
  540. }
  541.  
  542. if(tile_clicked_already == true) return socket.emit('user eroare', 'You have already checked this tile!');
  543.  
  544. for(var i in game.bombs) {
  545. if(game.bombs[i] == tile) bomb_checked = true;
  546. }
  547.  
  548. if(!game.hasOwnProperty('tiles')) {
  549. Minesweeper[amount].tiles = [];
  550. Minesweeper[amount].tiles.push(tile);
  551. } else Minesweeper[amount].tiles.push(tile);
  552.  
  553. if(bomb_checked == true) {
  554. pool.query('UPDATE mines SET win = 0, won_amount = 0, tiles_clicked = ? WHERE id = ?', [Minesweeper[amount].tiles.join('|'), game.id], function(aa) {
  555.  
  556. });
  557. socket.emit('mines', 'finished', game.secret, game.bombs, 'lost');
  558. delete User_minesweeper[users[token].steamid];
  559. return;
  560. }
  561.  
  562. var curr_amount = game.amount;
  563. var _winning_amount = parseInt(curr_amount * ((game.tiles.length) / 250 * (game.type * 1.3)));
  564.  
  565. if(game.type == 24) _winning_amount = curr_amount * 24;
  566.  
  567. if(!game.hasOwnProperty('winning_amount')) Minesweeper[amount].winning_amount = _winning_amount;
  568. else Minesweeper[amount].winning_amount = parseInt(Minesweeper[amount].winning_amount) + _winning_amount;
  569.  
  570. Minesweeper[amount]._win_amount = parseInt(Minesweeper[amount].winning_amount) + parseInt(Minesweeper[amount].amount);
  571.  
  572. if(Minesweeper[amount].type == 1 && Minesweeper[amount].tiles.length == 24) {
  573. pool.query('UPDATE users SET balance = balance + ? WHERE token = ?', [Minesweeper[amount]._win_amount, token], function(e,r) {
  574. if(e) throw e;
  575.  
  576. pool.query('UPDATE mines SET win = 1, won_amount = ?, tiles_clicked = ? WHERE id = ?', [game.id, Minesweeper[amount]._win_amount, Minesweeper[amount].tiles.join('|')], function(aa) {
  577.  
  578. });
  579.  
  580. user_balance_check(token, function(er, ball) {
  581. socket.emit('user balance', ball);
  582. socket.emit('mines', 'gettile', tile, _winning_amount, Minesweeper[amount]._win_amount);
  583. socket.emit('mines', 'finished', game.secret, game.bombs, 'won', Minesweeper[amount]._win_amount);
  584. socket.emit('user alerta', 'You have cashed out the mines game #' + game.id + ' and won ' + Minesweeper[amount]._win_amount);
  585. delete User_minesweeper[users[token].steamid];
  586. });
  587.  
  588. return;
  589. });
  590. } else if(Minesweeper[amount].type == 3 && Minesweeper[amount].tiles.length == 22) {
  591. pool.query('UPDATE users SET balance = balance + ? WHERE token = ?', [Minesweeper[amount]._win_amount, token], function(e,r) {
  592. if(e) throw e;
  593.  
  594. pool.query('UPDATE mines SET win = 1, won_amount = ?, tiles_clicked = ? WHERE id = ?', [game.id, Minesweeper[amount]._win_amount, Minesweeper[amount].tiles.join('|')], function(aa) {
  595.  
  596. });
  597.  
  598. user_balance_check(token, function(er, ball) {
  599. socket.emit('user balance', ball);
  600. socket.emit('mines', 'gettile', tile, _winning_amount, Minesweeper[amount]._win_amount);
  601. socket.emit('mines', 'finished', game.secret, game.bombs, 'won', Minesweeper[amount]._win_amount);
  602. socket.emit('user alerta', 'You have cashed out the mines game #' + game.id + ' and won ' + Minesweeper[amount]._win_amount);
  603. delete User_minesweeper[users[token].steamid];
  604. });
  605.  
  606. return;
  607. });
  608. } else if(Minesweeper[amount].type == 5 && Minesweeper[amount].tiles.length == 20) {
  609. pool.query('UPDATE users SET balance = balance + ? WHERE token = ?', [Minesweeper[amount]._win_amount, token], function(e,r) {
  610. if(e) throw e;
  611.  
  612. pool.query('UPDATE mines SET win = 1, won_amount = ?, tiles_clicked = ? WHERE id = ?', [game.id, Minesweeper[amount]._win_amount, Minesweeper[amount].tiles.join('|')], function(aa) {
  613.  
  614. });
  615.  
  616. user_balance_check(token, function(er, ball) {
  617. socket.emit('user balance', ball);
  618. socket.emit('mines', 'gettile', tile, _winning_amount, Minesweeper[amount]._win_amount);
  619. socket.emit('mines', 'finished', game.secret, game.bombs, 'won', Minesweeper[amount]._win_amount);
  620. socket.emit('user alerta', 'You have cashed out the mines game #' + game.id + ' and won ' + Minesweeper[amount]._win_amount);
  621. delete User_minesweeper[users[token].steamid];
  622. });
  623.  
  624. return;
  625. });
  626. } else if(Minesweeper[amount].type == 24 && Minesweeper[amount].tiles.length == 1) {
  627. pool.query('UPDATE users SET balance = balance + ? WHERE token = ?', [Minesweeper[amount]._win_amount, token], function(e,r) {
  628. if(e) throw e;
  629.  
  630. pool.query('UPDATE mines SET win = 1, won_amount = ?, tiles_clicked = ? WHERE id = ?', [game.id, Minesweeper[amount]._win_amount, Minesweeper[amount].tiles.join('|')], function(aa) {
  631.  
  632. });
  633.  
  634. user_balance_check(token, function(er, ball) {
  635. socket.emit('user balance', ball);
  636. socket.emit('mines', 'gettile', tile, _winning_amount, Minesweeper[amount]._win_amount);
  637. socket.emit('mines', 'finished', game.secret, game.bombs, 'won', Minesweeper[amount]._win_amount);
  638. socket.emit('user alerta', 'You have cashed out the mines game #' + game.id + ' and won ' + Minesweeper[amount]._win_amount);
  639. delete User_minesweeper[users[token].steamid];
  640. });
  641.  
  642. return;
  643. });
  644. }
  645.  
  646. socket.emit('mines', 'gettile', tile, _winning_amount, Minesweeper[amount]._win_amount);
  647. } else socket.emit('user eroare', 'You are not in a mines game!');
  648. } else if(type == "cashout") {
  649. var amount = mtype;
  650.  
  651. if(Minesweeper.hasOwnProperty(amount) && User_minesweeper.hasOwnProperty(users[token].steamid)) {
  652. var game = Minesweeper[amount];
  653.  
  654. pool.query('UPDATE users SET balance = balance + ? WHERE token = ?', [Minesweeper[amount]._win_amount, token], function(e,r) {
  655. if(e) throw e;
  656.  
  657. pool.query('UPDATE mines SET win = 1, won_amount = ?, tiles_clicked = ? WHERE id = ?', [game.id, Minesweeper[amount]._win_amount, Minesweeper[amount].tiles.join('|')], function(aa) {
  658. if(aa) throw aa;
  659. });
  660.  
  661. user_balance_check(token, function(er, ball) {
  662. socket.emit('user balance', ball);
  663. socket.emit('mines', 'gettile', tile, _winning_amount, Minesweeper[amount]._win_amount);
  664. socket.emit('mines', 'finished', game.secret, game.bombs, 'won', Minesweeper[amount]._win_amount);
  665. socket.emit('user alerta', 'You have cashed out the mines game #' + game.id + ' and won ' + Minesweeper[amount]._win_amount);
  666. delete User_minesweeper[users[token].steamid];
  667. });
  668. });
  669. } else socket.emit('user eroare', 'You are not in a mines game!');
  670. }
  671. }
  672. });
  673.  
  674. var Dice_playing = {};
  675.  
  676.  
  677. socket.on('dice', function(amount, chance, type, token) {
  678. if(users.hasOwnProperty(token)) {
  679. var types = ['over', 'under'];
  680. var type_accepted = false;
  681. for(var i in types) {
  682. if(type == types[i]) type_accepted = true;
  683. }
  684.  
  685. if(Dice_playing.hasOwnProperty(token)) return socket.emit('user eroare', 'Wait until the last round of dice is ended!');
  686.  
  687. if(type_accepted == false) return socket.emit('user eroare', 'The type is not accepted!');
  688.  
  689. if(type == "under" && (chance < 0.01 || chance > 94.00)) return socket.emit('user eroare', 'Something is wrong with your game, try again!');
  690. if(type == "over" && (chance < 6.00 || chance > 99.99)) return socket.emit('user eroare', 'Something is wrong with your game, try again!');
  691.  
  692. user_balance_check(token, function(er, bal) {
  693. socket.emit('user balance', bal);
  694. if(bal < amount) return socket.emit('user eroare', 'You do not have enough balance to play dice!');
  695.  
  696. Dice_playing[token] = 1;
  697.  
  698. pool.query('UPDATE users SET balance = balance - ? WHERE token = ?', [amount, token], function(errr) {
  699. if(errr) throw errr;
  700.  
  701. socket.emit('user balance', parseInt(bal-parseInt(amount)));
  702.  
  703. var hash;
  704. var secret = makeSecret();
  705. var generated_number;
  706. if(type == "under") generated_number = parseFloat(parseFloat(Math.random() * (94.00 - 0.01) + 0.01).toFixed(2));
  707. else if(type == "over") generated_number = parseFloat(parseFloat(Math.random() * (99.99 - 6.00) + 6.00).toFixed(2));
  708.  
  709. hash = encrypt(secret, generated_number.toString());
  710.  
  711. socket.emit('dice', 'hash', hash);
  712.  
  713. setTimeout(function() {
  714. if(type == "under" && generated_number <= chance) {
  715. var multiplier = parseFloat(parseFloat(95 / chance).toFixed(2));
  716. var won_amount = parseInt(amount * multiplier);
  717.  
  718. pool.query('UPDATE users SET balance = balance + ? WHERE token = ?', [parseInt(won_amount), token], function(e,r) {
  719. if(e) throw e;
  720.  
  721. pool.query('INSERT INTO dice SET user = ?, type = ?, amount = ?, amount_won = ?, gnumber = ?, chance = ?, won = 1', [users[token].steamid, type, amount, won_amount, generated_number, chance], function(er, ro) {
  722. if(er) throw er;
  723. });
  724.  
  725. user_balance_check(token, function(er, ball) {
  726. socket.emit('user balance', ball);
  727. socket.emit('dice', 'won', secret, generated_number, multiplier, won_amount);
  728. });
  729.  
  730. });
  731. } else if(type == "over" && generated_number >= chance) {
  732. var multiplier = parseFloat(parseFloat(95 / chance).toFixed(2));
  733. var won_amount = parseInt(amount * multiplier);
  734.  
  735. pool.query('UPDATE users SET balance = balance + ? WHERE token = ?', [parseInt(won_amount), token], function(e,r) {
  736. if(e) throw e;
  737.  
  738.  
  739. pool.query('INSERT INTO dice SET user = ?, type = ?, amount = ?, amount_won = ?, gnumber = ?, chance = ?, won = 1', [users[token].steamid, type, amount, won_amount, generated_number, chance], function(er, ro) {
  740. if(er) throw er;
  741. });
  742.  
  743. user_balance_check(token, function(er, ball) {
  744. socket.emit('user balance', ball);
  745. socket.emit('dice', 'won', secret, generated_number, multiplier, won_amount);
  746. });
  747. });
  748. } else {
  749.  
  750. pool.query('INSERT INTO dice SET user = ?, type = ?, amount = ?, amount_won = 0, gnumber = ?, chance = ?, won = 0', [users[token].steamid, type, amount, generated_number, chance], function(er, ro) {
  751. if(er) throw er;
  752. });
  753.  
  754. socket.emit('dice', 'lost', secret, generated_number, multiplier);
  755. }
  756.  
  757. delete Dice_playing[token];
  758. }, 1500);
  759. });
  760.  
  761. });
  762. }
  763. });
  764.  
  765.  
  766.  
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.  
  790. // ADMIN USERS ONLINE
  791. socket.on('admin want users online', function(token) {
  792. if(users.hasOwnProperty(token) && users[token].rank == 100) {
  793. sendUsersOnline(socket);
  794. }
  795. });
  796. // ADMIN USERS ONLINE
  797.  
  798. // G RECAPTCHA
  799. socket.on('g-recaptcha-response', function(response, token) {
  800. if(users.hasOwnProperty(token)) {
  801. var url = 'https://www.google.com/recaptcha/api/siteverify?secret=' + config.recaptcha.secret + '&response=' + response;
  802. request(url, function(err, resp, body) {
  803. var bod = JSON.parse(body);
  804. if(bod.success == true) {
  805. if(Rain.users_joined.indexOf(users[token].steamid) == -1) {
  806. if(Rain.enabled == true) {
  807. Rain.users_joined.push(users[token].steamid);
  808. socket.emit('user alerta', 'You have successfully entered in rain!');
  809. logger.info('User ' + users[token].name + ' has joined the Rain!');
  810.  
  811. var $html = `
  812. <p>WAITING FOR PLAYERS TO JOIN...</p>
  813. `;
  814. socket.emit('user rain show', $html);
  815.  
  816. } else socket.emit('user eroare', 'There is no rain active!');
  817. } else socket.emit('user eroare', 'You are already in rain!');
  818. }
  819. });
  820. }
  821. });
  822. // G RECAPTCHA
  823.  
  824. // JOIN RAIN
  825. socket.on('user want join rain', function(token) {
  826. if(users.hasOwnProperty(token) && token) {
  827. socket.emit('use render recaptcha', config.recaptcha.sitekey);
  828. }
  829. });
  830. // JOIN RAIN
  831.  
  832. // AFF LINK
  833. socket.on('aff link', function(code, token) {
  834. if(users.hasOwnProperty(token) && code && token) {
  835. if(users.hasOwnProperty(token)) {
  836. if(users[token].redeemed_code == '') {
  837. pool.query('SELECT user FROM codes WHERE code = ' + pool.escape(code), function(err, row) {
  838. if(err) return logger.trace(users[token].steamid + ' aff link err - 1');
  839. if(row.length == 0) return;
  840.  
  841. pool.query('SELECT name FROM users WHERE steamid = ' + pool.escape(row[0].user), function(er, ro) {
  842. if(er) return;
  843. if(ro.length == 0) return;
  844. socket.emit('user get aff link', ro[0].name, code);
  845. });
  846. });
  847. }
  848. }
  849. }
  850. });
  851. // AFF LINK
  852.  
  853. // PINNED MSG
  854. socket.on('admin set pin msg', function(msg, token) {
  855. if(users.hasOwnProperty(token) && token) {
  856. if(users[token].rank == 100) {
  857. if(msg == '') {
  858. Pinned_msg.currently = null;
  859. socket.emit('user alerta', 'You have changed the pin to default!');
  860. io.sockets.emit('user pinned msg', Pinned_msg.default);
  861. } else {
  862. Pinned_msg.currently = msg;
  863. Pinned_msg.last = users[token].steamid;
  864. socket.emit('user alerta', 'You have changed the pin to "' + Pinned_msg.currently + '" !');
  865. io.sockets.emit('user pinned msg', Pinned_msg.currently);
  866. }
  867. }
  868. }
  869. });
  870. // PINNED MSG
  871.  
  872. // RAFFLES22
  873. socket.on('user want raffles history', function(token) {
  874. if(users.hasOwnProperty(token) && token) {
  875. antiSpam(socket, token, function() {
  876. pool.query('SELECT * FROM raffles_entries WHERE user = ' + pool.escape(users[token].steamid) + ' AND ended = 1 ORDER BY time DESC LIMIT 80', function(err, row) {
  877. if(err) return logger.trace(users[token].steamid + ' - raffle history error - 1');
  878. if(row.length == 0) return;
  879.  
  880. socket.emit('user raffles history', row);
  881. });
  882. });
  883. }
  884. });
  885.  
  886. socket.on('raffle get fair', function(id, token) {
  887. if(users.hasOwnProperty(token) && id && token) {
  888. pool.query('SELECT hash, secrets, secret_winner, ended FROM raffles WHERE id = ' + pool.escape(id), function(er, ro) {
  889. if(er) throw er;
  890. if(ro.length == 0) return;
  891.  
  892. socket.emit('raffle fair check', ro[0]);
  893. });
  894. }
  895. });
  896.  
  897. socket.on('admin add raffle', function(id, name, image, price, slots, token) {
  898. if(users.hasOwnProperty(token) && id && name && image && price && slots && token) {
  899. if(users[token].rank == 100) {
  900. createRaffle(name, image, price, id, slots, socket, 1);
  901. }
  902. }
  903. });
  904.  
  905. socket.on('raffle user join', function(id, slots, token) {
  906. logger.trace('[RAW] raffle user join');
  907. logger.trace(id);
  908. logger.trace(slots);
  909. logger.trace(token);
  910. logger.trace(users[token].steamid);
  911. if(users.hasOwnProperty(token) && id && slots && token) {
  912. antiSpam(socket, token, function() {
  913. if(Games_Work == false) return socket.emit('user eroare', 'The raffles are closed!');
  914. joinRaffle(id, slots, token, socket);
  915. });
  916. }
  917. });
  918.  
  919. socket.on('user raffles quick join', function(id, token) {
  920. logger.trace('[RAW] user raffles quick join');
  921. logger.trace(id);
  922. logger.trace(token);
  923. logger.trace(users[token].steamid);
  924. if(users.hasOwnProperty(token) && id && token) {
  925. antiSpam(socket, token, function() {
  926. if(Games_Work == false) return socket.emit('user eroare', 'The raffles are closed!');
  927.  
  928. var busy_slots = [];
  929. var free_slots = [];
  930.  
  931. var sslots = Raffles.List[id].sslots;
  932. var slots = Raffles.List[id].slots;
  933.  
  934. for(var h in sslots) {
  935. busy_slots.push(sslots[h]);
  936. }
  937.  
  938. for(var f = 0; f < slots; f++) {
  939. if(busy_slots.indexOf(f) > -1) continue;
  940. free_slots.push(f);
  941. }
  942.  
  943. var random_slot_pick = [];
  944. random_slot_pick.push(free_slots[Math.floor(Math.random()*(free_slots.length-1-0+1)+0)]);
  945.  
  946.  
  947. if(free_slots.length == 0) return socket.emit('user eroare', 'There is no slot active!');
  948.  
  949. joinRaffle(id, random_slot_pick, token, socket);
  950. });
  951. }
  952. });
  953.  
  954. socket.on('raffle prize get coins', function(rafid, token) {
  955. logger.trace('[RAW] raffle prize get coins');
  956. logger.trace(rafid);
  957. logger.trace(token);
  958. logger.trace(users[token].steamid);
  959. if(users.hasOwnProperty(token) && rafid && token) {
  960. antiSpam(socket, token, function() {
  961. if(Raffles.Prizes.hasOwnProperty(rafid)) {
  962. if(Raffles.Tipul[rafid] != 0) coins = parseInt(Raffles.Prizes[rafid].price*1.03);
  963. else return socket.emit('user eroare', 'An error occurred claiming coins from the raffle. Contact an admin!');
  964.  
  965. addLog(users[token].steamid, 'get_coins_raffle', '+' + coins, 'User got coins from a skin raffle.(' + coins + ')', function() {
  966. pool.query('UPDATE users SET balance = balance + ' + pool.escape(parseInt(coins)) + ' WHERE steamid = ' + pool.escape(users[token].steamid), function(er, ro) {
  967. if(er) throw er;
  968.  
  969. user_balance_check(token, function(errr, bal) {
  970. pool.query('UPDATE raffles SET winner_tradeid = 0, winner_status = 1, winner_statustext = "GOT_COINS" WHERE id = ' + pool.escape(rafid), function(e,r) {
  971. logger.error('User ' + users[token].steamid + ' (' + users[token].name + ') got ' + coins + ' coins ($' + parseFloat(coins/1000).toFixed(2) + ') from raffle #' + rafid);
  972.  
  973. website_inv_raffles.splice(website_inv_raffles.indexOf(Raffles.Prizes[rafid].id), 1);
  974.  
  975. delete Raffles.Prizes[rafid];
  976. socket.emit('raffle coins got', coins);
  977.  
  978. socket.emit('user balance', bal);
  979. Raffles.Prizess[users[token].steamid].splice(Raffles.Prizess[users[token].steamid].indexOf(rafid), 1);
  980. });
  981. });
  982. });
  983. });
  984. }
  985. });
  986. }
  987. });
  988.  
  989. socket.on('raffle prize get withdraw', function(rafid, token) {
  990. logger.trace('[RAW] raffle prize get withdraw');
  991. logger.trace(rafid);
  992. logger.trace(users[token].steamid);
  993. if(users.hasOwnProperty(token) && rafid && token) {
  994. antiSpam(socket, token, function() {
  995. if(Raffles.Prizes.hasOwnProperty(rafid)) {
  996.  
  997. var prize = parseInt(Raffles.Prizes[rafid].price);
  998.  
  999. pool.query('SELECT disabled_withdraw FROM users WHERE steamid = ' + pool.escape(users[token].steamid), function(a, bb) {
  1000. if(a) return;
  1001.  
  1002. if(bb[0].disabled_withdraw == 1) return socket.emit('user eroare', 'You can\'t withdraw raffle prize!');
  1003.  
  1004. if(Raffles.Prizes[rafid].id == 0) return socket.emit('user eroare', 'This raffle item is not withdrawable!');
  1005. if(users[token].depamount < 5000) return socket.emit('user eroare', 'You need to deposit at least $5,00 in order to withdraw this prize!');
  1006. if((users[token].rank == 10 || users[token].rank == 11 || users[token].rank == 12) && users[token].can_withdraw == 0) return socket.emit('user eroare', 'You are not able to withdraw items!');
  1007.  
  1008. ET.ITrade.SendOfferToSteamId({
  1009. 'steam_id': users[token].steamid,
  1010. 'items_to_send': Raffles.Prizes[rafid].id,
  1011. 'message': config.site_name + ' | Withdraw raffle prize from raffle id #' + rafid
  1012. }, (err, body) => {
  1013. if(err) return socket.emit('user eroare', 'Something happened sending your prize. Try again!');
  1014.  
  1015. if(body.response.offer.state == 2) {
  1016.  
  1017. var string = 'raffle';
  1018. if(users[token].rank == 100) string = 'Araffle';
  1019.  
  1020. addNewTrade(body.response.offer.id, string, Raffles.Prizes[rafid].id, token, function(err) {
  1021. if(err) return logger.error(err + ' [RAFFLE]');
  1022.  
  1023. editTradeAmount(body.response.offer.id, prize, function(er2) {
  1024. if(er2) return logger.error(er2 + ' [RAFFLE]');
  1025.  
  1026. pool.query('UPDATE raffles SET winner_tradeid = ' + pool.escape(body.response.offer.id) + ', winner_statustext = "PENDING_TRADE" WHERE id = ' + pool.escape(rafid), function(e,r) {
  1027. delete Raffles.Prizes[rafid];
  1028. Raffles.Prizess[users[token].steamid].splice(Raffles.Prizess[users[token].steamid].indexOf(rafid), 1);
  1029.  
  1030. logger.error('User ' + users[token].steamid + ' (' + users[token].name + ') withdrew raffle #' + rafid + ' prize worth of $' + parseFloat(prize/1000).toFixed(2));
  1031.  
  1032. socket.emit('user raffle prize successfully', body.response.offer.id, prize, 1);
  1033.  
  1034. pending_raffle[body.response.offer.id] = {
  1035. user: users[token].steamid,
  1036. amount: prize,
  1037. raffle_id: rafid
  1038. };
  1039. });
  1040. });
  1041. });
  1042. }
  1043. });
  1044. });
  1045. }
  1046. });
  1047. }
  1048. });
  1049.  
  1050. // RAFFLES22
  1051.  
  1052.  
  1053. // DAILY FREE
  1054. socket.on('user daily free', function(token) {
  1055. if(users.hasOwnProperty(token) && token) {
  1056. antiSpam(socket, token, function() {
  1057. var nume = users[token].name.toLowerCase();
  1058. if(nume.includes(config.site_name.toLowerCase())) {
  1059. if(users[token].dailygift-time() <= 0) {
  1060. if(users[token].deps < 1) return socket.emit('user eroare', 'You need to make at least one deposit<br>Click <b>"How do I claim this"</b> for more informations about claiming daily free.');
  1061. if(users[token].level < 4) return socket.emit('user eroare', 'You need to have at least Steam Level 4<br>Click <b>"How do I claim this"</b> for more informations about claiming daily free.');
  1062.  
  1063. var reward = getDailyReward(token);
  1064.  
  1065. addLog(users[token].steamid, 'get_daily_free', '+' + reward, 'Got +' + reward + ' from daily free.',function() {
  1066. pool.query('UPDATE users SET balance = balance + ' + pool.escape(reward) + ', dailygift = ' + pool.escape(time()+86400) + ' WHERE token = ' + pool.escape(token), function(err, row) {
  1067. if(err) throw err;
  1068.  
  1069. user_balance_check(token, function(er, bal) {
  1070. users[token].dailygift = time()+86400;
  1071. users[token].balance = bal;
  1072. socket.emit('user balance', users[token].balance);
  1073.  
  1074. socket.emit('user settings', 'dailygift', parseInt(parseInt(users[token].dailygift)-time()), getDailyReward(token));
  1075.  
  1076. socket.emit('user alerta', 'You have successfully claimed ' + reward + ' coins from the daily free!');
  1077.  
  1078. logger.trace('User ' + users[token].steamid + ' (' + users[token].name + ') successfully got ' + reward + ' (level: ' + users[token].xp_level + ') coins from daily gift!');
  1079. });
  1080. });
  1081. });
  1082. } else return socket.emit('user eroare', 'You have claimed daily free for this day!');
  1083. } else return socket.emit('user eroare', 'You need to have <b>' + config.site_name + '</b> in your name<br>Click <b>"How do I claim this"</b> for more informations about claiming daily free.');
  1084. });
  1085. }
  1086. });
  1087. // DAILY FREE
  1088.  
  1089.  
  1090. // HOURLY GIFT FREE
  1091. socket.on('user hourly free', function(token) {
  1092. if(users.hasOwnProperty(token) && token) {
  1093. antiSpam(socket, token, function() {
  1094. if(users[token].hourlygift-time() <= 0) {
  1095. if(users[token].deps < 1) return socket.emit('user eroare', 'You need to make at least one deposit<br>Click <b>"How do I claim this"</b> for more informations about claiming hourly free.');
  1096. if(users[token].level < 4) return socket.emit('user eroare', 'You need to have at least Steam Level 4<br>Click <b>"How do I claim this"</b> for more informations about claiming hourly free.');
  1097. antiSpamEndpoints(socket, token, function() {
  1098. gamesUserChecker(token, function(check) {
  1099. if(check == true) {
  1100. avatarUserChecker(token, function(check2) {
  1101. if(check2 == true) {
  1102.  
  1103. socket.emit('hourly free recaptcha', config.recaptcha.sitekey);
  1104.  
  1105. } else return socket.emit('user eroare', 'You need to have our picture image as your Steam Profile picture<br>Click <b>"How do I claim this"</b> for more informations about claiming hourly free.');
  1106. });
  1107. } else return socket.emit('user eroare', 'You need to have 50+ hours (CS:GO, PUBG, Rust)<br>Click <b>"How do I claim this"</b> for more informations about claiming hourly free.');
  1108. });
  1109. });
  1110. } else return socket.emit('user eroare', 'You have claimed hourly free for this hour!');
  1111. });
  1112. }
  1113. });
  1114.  
  1115. socket.on('hourly free get recaptcha', function(response, token) {
  1116. if(users.hasOwnProperty(token) && response && token) {
  1117. var url = 'https://www.google.com/recaptcha/api/siteverify?secret=' + config.recaptcha.secret + '&response=' + response;
  1118. request(url, function(err, resp, body) {
  1119. var bod = JSON.parse(body);
  1120. if(bod.success == true) {
  1121. var random_coins = Math.floor(Math.random()*(30-20+1)+20);
  1122.  
  1123. addLog(users[token].steamid, 'get_hourly_free', '+' + random_coins, 'Hourly free, user received ' + random_coins,function() {
  1124. pool.query('UPDATE users SET balance = balance + ' + pool.escape(random_coins) + ', hourlygift = ' + pool.escape(time()+3600) + ' WHERE token = ' + pool.escape(token), function(err, row) {
  1125. if(err) throw err;
  1126.  
  1127. user_balance_check(token, function(er, bal) {
  1128. users[token].hourlygift = time()+3600;
  1129. users[token].balance = bal;
  1130. socket.emit('user balance', users[token].balance);
  1131.  
  1132. socket.emit('user settings', 'hourlygift', parseInt(parseInt(users[token].hourlygift)-time()));
  1133.  
  1134. socket.emit('user alerta', 'You have successfully claimed ' + random_coins + ' coins from the hourly free!');
  1135.  
  1136. logger.trace('User ' + users[token].steamid + ' (' + users[token].name + ') successfully got ' + random_coins + ' coins from hourly gift!');
  1137. });
  1138. });
  1139. });
  1140. }
  1141. });
  1142. }
  1143. });
  1144. // HOURLY GIFT FREE
  1145.  
  1146.  
  1147. // REFRESH BALANCE WANT USER
  1148. socket.on('user want refresh balance', function(token) {
  1149. if(users.hasOwnProperty(token) && token) {
  1150. antiSpam(socket, token, function() {
  1151. user_balance_check(token, function(err, bal) {
  1152. if(err) return socket.emit('user wanted refresh balance', err);
  1153. socket.emit('user wanted refresh balance', err, bal);
  1154. });
  1155. });
  1156. }
  1157. });
  1158. // REFRESH BALANCE WANT USER
  1159.  
  1160. socket.on('user get deposit inv', function(token) {
  1161. if(users.hasOwnProperty(token)) {
  1162. antiSpam(socket, token, function() {
  1163. if(users.hasOwnProperty(token)) users_getInventory(token, socket, function(inv) {
  1164. socket.emit('user deposit inventory', inv);
  1165. });
  1166. });
  1167. }
  1168. });
  1169.  
  1170. socket.on('user get withdraw inv', function(token) {
  1171. if(users.hasOwnProperty(token)) {
  1172. antiSpam(socket, token, function() {
  1173. var inv = [];
  1174. for(var z in website_inventory) {
  1175. for(var h in website_inv_raffles) {
  1176. if(website_inventory[z].id == website_inv_raffles[h]) website_inventory[z].ss = 1;
  1177. }
  1178. }
  1179.  
  1180. for(var z in website_inventory) {
  1181. if(website_inventory[z].ss != 1) inv.push(website_inventory[z]);
  1182. }
  1183.  
  1184. if(token) socket.emit('user withdraw inventory', inv);
  1185. });
  1186. }
  1187. });
  1188.  
  1189. socket.on('user get balance', function(token) {
  1190. if(users.hasOwnProperty(token) && token) {
  1191. user_balance_check(token, function(err, bal) {
  1192. users[token].balance = bal;
  1193. socket.emit('user balance', bal);
  1194. });
  1195. }
  1196. });
  1197.  
  1198. // ADMIN THINGS
  1199. socket.on('admin get info', function(token) {
  1200. if(users.hasOwnProperty(token) && token && users[token].rank == 100) {
  1201. var stats = {
  1202. deposits: {
  1203. _1day: 0,
  1204. _7days: 0,
  1205. _30days: 0,
  1206. _all: 0
  1207. },
  1208. withdraws: {
  1209. _1day: 0,
  1210. _7days: 0,
  1211. _30days: 0,
  1212. _all: 0
  1213. }
  1214. };
  1215.  
  1216. pool.query(`
  1217. SELECT ( SELECT SUM(amount) FROM trades WHERE time >= ` + parseInt(time()-86400) + ` AND type = "deposit" AND status = "1" ) AS d_1day,
  1218. ( SELECT SUM(amount) FROM trades WHERE time >= ` + parseInt(time()-(86400)*7) + ` AND type = "deposit" AND status = "1" ) AS d_7days,
  1219. ( SELECT SUM(amount) FROM trades WHERE time >= ` + parseInt(time()-(86400)*30) + ` AND type = "deposit" AND status = "1" ) AS d_30days,
  1220. ( SELECT SUM(amount) FROM trades WHERE type = "deposit" AND status = "1" ) AS d_all,
  1221. ( SELECT SUM(amount) FROM trades WHERE time >= ` + parseInt(time()-86400) + ` AND ( type = "withdraw" OR type = "raffle" ) AND status = "1" ) AS w_1day,
  1222. ( SELECT SUM(amount) FROM trades WHERE time >= ` + parseInt(time()-(86400*7)) + ` AND ( type = "withdraw" OR type = "raffle" ) AND status = "1" ) AS w_7days,
  1223. ( SELECT SUM(amount) FROM trades WHERE time >= ` + parseInt(time()-(86400*30)) + ` AND ( type = "withdraw" OR type = "raffle" ) AND status = "1" ) AS w_30days,
  1224. ( SELECT SUM(amount) FROM trades WHERE ( type = "withdraw" OR type = "raffle" ) AND status = "1" ) AS w_all`, function(err, row) {
  1225. if(err) throw err;
  1226. if(row.length == 0) {
  1227. socket.emit('admin info', stats);
  1228. } else {
  1229. stats.deposits._1day = row[0].d_1day;
  1230. stats.deposits._7days = row[0].d_7days;
  1231. stats.deposits._30days = row[0].d_30days;
  1232. stats.deposits._all = row[0].d_all;
  1233. stats.withdraws._1day = row[0].w_1day;
  1234. stats.withdraws._7days = row[0].w_7days;
  1235. stats.withdraws._30days = row[0].w_30days;
  1236. stats.withdraws._all = row[0].w_all;
  1237.  
  1238. socket.emit('admin info', stats);
  1239. }
  1240. });
  1241. }
  1242. });
  1243.  
  1244. socket.on('admin aget info', function(token) {
  1245. if(users.hasOwnProperty(token) && token && users[token].rank == 100) {
  1246. var stats = {
  1247. adeposits: {
  1248. _1day: 0,
  1249. _7days: 0,
  1250. _14days: 0,
  1251. _all: 0
  1252. },
  1253. awithdraws: {
  1254. _1day: 0,
  1255. _7days: 0,
  1256. _14days: 0,
  1257. _all: 0
  1258. }
  1259. };
  1260.  
  1261. pool.query(`
  1262. SELECT ( SELECT SUM(amount) FROM trades WHERE time >= ` + parseInt(time()-86400) + ` AND type = "Adeposit" AND status = "1" ) AS d_1day,
  1263. ( SELECT SUM(amount) FROM trades WHERE time >= ` + parseInt(time()-(86400)*7) + ` AND type = "Adeposit" AND status = "1" ) AS d_7days,
  1264. ( SELECT SUM(amount) FROM trades WHERE time >= ` + parseInt(time()-(86400)*14) + ` AND type = "Adeposit" AND status = "1" ) AS d_14days,
  1265. ( SELECT SUM(amount) FROM trades WHERE type = "Adeposit" AND status = "1" ) AS d_all,
  1266. ( SELECT SUM(amount) FROM trades WHERE time >= ` + parseInt(time()-86400) + ` AND ( type = "Awithdraw" OR type = "Araffle" ) AND status = "1" ) AS w_1day,
  1267. ( SELECT SUM(amount) FROM trades WHERE time >= ` + parseInt(time()-(86400*7)) + ` AND ( type = "Awithdraw" OR type = "Araffle" ) AND status = "1" ) AS w_7days,
  1268. ( SELECT SUM(amount) FROM trades WHERE time >= ` + parseInt(time()-(86400*14)) + ` AND ( type = "Awithdraw" OR type = "Araffle" ) AND status = "1" ) AS w_14days,
  1269. ( SELECT SUM(amount) FROM trades WHERE ( type = "Awithdraw" OR type = "Araffle" ) AND status = "1" ) AS w_all`, function(err, row) {
  1270. if(err) throw err;
  1271. if(row.length == 0) {
  1272. socket.emit('admin ainfo', stats);
  1273. } else {
  1274. stats.adeposits._1day = row[0].d_1day;
  1275. stats.adeposits._7days = row[0].d_7days;
  1276. stats.adeposits._14days = row[0].d_14days;
  1277. stats.adeposits._all = row[0].d_all;
  1278. stats.awithdraws._1day = row[0].w_1day;
  1279. stats.awithdraws._7days = row[0].w_7days;
  1280. stats.awithdraws._14days = row[0].w_14days;
  1281. stats.awithdraws._all = row[0].w_all;
  1282.  
  1283. socket.emit('admin ainfo', stats);
  1284. }
  1285. });
  1286. }
  1287. });
  1288.  
  1289. socket.on('admin website statistics', function(token) {
  1290. if(users.hasOwnProperty(token) && token && users[token].rank == 100) {
  1291. pool.query(`
  1292. SELECT (SELECT COUNT(id) FROM users) AS users_registered,
  1293. (SELECT COUNT(id) FROM users WHERE depamount >= 5000 AND rank = 0) as deposited_over,
  1294. (SELECT COUNT(id) FROM users WHERE wagered >= 5000 AND rank = 0) as wagered_over,
  1295. (SELECT COUNT(id) FROM users WHERE balance >= 5000 AND rank = 0) as balance_over,
  1296.  
  1297. (SELECT SUM(amount) FROM bets) as roulette_total_bets_Amount,
  1298. (SELECT COUNT(id) FROM bets) as roulette_total_bets_Count,
  1299.  
  1300. (SELECT COUNT(id) FROM raffles) as raffles_made,
  1301. (SELECT SUM(item_price) FROM raffles) as raffles_worth,
  1302. (SELECT SUM(item_price)*slots FROM raffles WHERE ended = 1) as coins_wasted,
  1303.  
  1304. (SELECT COUNT(id) FROM trades WHERE status = "1" AND type = "deposit") AS total_deposits_acc,
  1305. (SELECT COUNT(id) FROM trades WHERE status = "1" AND ( type = "withdraw" OR type = "raffle" ) ) AS total_withdraws_acc,
  1306. (SELECT COUNT(id) FROM trades WHERE status = "2" AND type = "deposit") AS total_deposits_dec,
  1307. (SELECT COUNT(id) FROM trades WHERE status = "2" AND ( type = "withdraw" OR type = "raffle" ) ) AS total_withdraws_dec`, function(err, row) {
  1308. if(err) throw err;
  1309. if(row.length == 0) return;
  1310.  
  1311. socket.emit('admin emit website statistics', row);
  1312. });
  1313. }
  1314. });
  1315. //
  1316.  
  1317.  
  1318.  
  1319. // CHECK TRADE ID
  1320. socket.on('admin check tid', function(tid, token) {
  1321. if(users.hasOwnProperty(token) && tid && token) {
  1322. if(users[token].rank == 100) {
  1323. ET.ITrade.GetOffer({'offer_id': tid}, (err, body) => {
  1324. if(err) return socket.emit('user eroare', 'Error retrieving status of the offer<br>' + body.message);
  1325. socket.emit('user alerta', 'Trade #' + body.response.offer.id + ' have state: ' + body.response.offer.state + ' (' + body.response.offer.state_name + ')');
  1326. });
  1327. }
  1328. }
  1329. });
  1330. // CHECK TRADE ID
  1331.  
  1332. // GET SOME INFOS
  1333. socket.on('admin get some info', function(token) {
  1334. if(users.hasOwnProperty(token) && token) {
  1335. if(users.hasOwnProperty(token) && users[token].rank == 100) {
  1336. pool.query('SELECT SUM( balance ) AS balance_in_circulation, COUNT( id ) AS users_count FROM users WHERE rank = 0 AND balance > 0', function(err, row) {
  1337. if(err) throw err;
  1338.  
  1339. socket.emit('admin send some info', row[0].balance_in_circulation, row[0].users_count);
  1340.  
  1341. });
  1342. }
  1343. }
  1344. });
  1345. // get some infos
  1346.  
  1347.  
  1348. // REMOVE MESSAGES
  1349. socket.on('admin remove msg', function(id_msg, token) {
  1350. if(users.hasOwnProperty(token) && id_msg && token) {
  1351. if(users[token].rank == 100 || users[token].rank == 1) {
  1352.  
  1353. for (var i = chat_msgs.length - 1; i >= 0; --i) {
  1354. if (chat_msgs[i].id == id_msg) {
  1355. chat_msgs.splice(i,1);
  1356. }
  1357. }
  1358.  
  1359. io.sockets.emit('admin remove msg', id_msg);
  1360.  
  1361. socket.emit('user alerta', 'Message of the user removed!');
  1362. }
  1363. }
  1364. });
  1365.  
  1366. socket.on('admin remove msgs', function(steamid, token) {
  1367. if(users.hasOwnProperty(token) && steamid && token) {
  1368. if(users[token].rank == 100 || users[token].rank == 1) {
  1369. for(var i in chat_msgs) {
  1370. var steamid_chat = chat_msgs[i].steamid.toString();
  1371. var steamid_to_delete = steamid.toString();
  1372. if (steamid_chat == steamid_to_delete) {
  1373. chat_msgs.splice(i,1);
  1374. }
  1375. }
  1376.  
  1377. io.sockets.emit('admin remove msgs', steamid);
  1378.  
  1379. socket.emit('user alerta', 'Messages of the user removed!');
  1380. }
  1381. }
  1382. });
  1383. // REMOVE MESSAGES
  1384.  
  1385. // UNMUTE USER
  1386. socket.on('admin unmute user', function(steamid, token) {
  1387. if(users.hasOwnProperty(token) && steamid && token) {
  1388. if(users[token].rank == 100 || users[token].rank == 1) {
  1389.  
  1390. pool.query('UPDATE users SET mute = 0 WHERE steamid = ' + pool.escape(steamid), function(err, row) {
  1391. if(err) return logger.trace(users[token].steamid + ' - error unmuting user - 1');
  1392.  
  1393. var tokenul = tokens[steamid];
  1394. users[tokenul].mute = 0;
  1395.  
  1396. socket.emit('user alerta', 'User unmuted successfully!');
  1397. });
  1398. }
  1399. }
  1400. });
  1401. // UNMUTE USER
  1402.  
  1403. // BAN/UNBAN
  1404. socket.on('admin ban user', function(steamid, token) {
  1405. if(users.hasOwnProperty(token) && steamid && token) {
  1406. if(users[token].rank == 100) {
  1407. pool.query('UPDATE users SET ban = 1 WHERE steamid = ' + pool.escape(steamid), function(err, row) {
  1408. if(err) return socket.emit('user eroare', 'This user doesn\'t exists!');
  1409.  
  1410. socket.emit('user alerta', 'User successfully banned!');
  1411. if(io.sockets.connected[ssockets[steamid]]) io.sockets.connected[ssockets[steamid]].emit('user refresh');
  1412. });
  1413. }
  1414. }
  1415. });
  1416.  
  1417. socket.on('admin unban user', function(steamid, token) {
  1418. if(users.hasOwnProperty(token) && steamid && token) {
  1419. if(users[token].rank == 100) {
  1420. pool.query('UPDATE users SET ban = 0 WHERE steamid = ' + pool.escape(steamid), function(err, row) {
  1421. if(err) return socket.emit('user eroare', 'This user doesn\'t exists!');
  1422.  
  1423. socket.emit('user alerta', 'User successfully unbanned!');
  1424. if(io.sockets.connected[ssockets[steamid]]) io.sockets.connected[ssockets[steamid]].emit('user refresh');
  1425. });
  1426. }
  1427. }
  1428. });
  1429. // BAN/UNBAN
  1430.  
  1431. // SEND COINS
  1432. socket.on('user send coins', function(steamid, coins, token) {
  1433. logger.trace('[RAW] user send coins');
  1434. logger.trace(steamid);
  1435. logger.trace(coins);
  1436. logger.trace(users[token].steamid);
  1437. if(users.hasOwnProperty(token) && steamid && coins && token) {
  1438. if(users[token].rank == 100) {
  1439. addLog(users[token].steamid, 'admin_send_coins', coins, 'Admin sent coins to ' + steamid + ' - ' + coins, function() {
  1440. addLog(steamid, 'admin_receive_coins', '+' + coins, 'Received coins from admin ' + users[token].steamid + ' - ' + coins, function() {
  1441. pool.query('UPDATE users SET balance = balance + ' + pool.escape(coins) + ' WHERE steamid = ' + pool.escape(steamid), function(err, row) {
  1442. if(err) throw err;
  1443.  
  1444. user_balance_check(tokens[steamid], function(er, bal) {
  1445.  
  1446. users[tokens[steamid]].balance = bal;
  1447.  
  1448. logger.error('Admin ' + users[token].steamid + ' sent ' + coins + ' coins to user ' + steamid);
  1449.  
  1450. socket.emit('user alerta', 'You have successfully sent ' + coins + ' coins to ' + users[tokens[steamid]].name);
  1451. if(io.sockets.connected[ssockets[steamid]]) io.sockets.connected[ssockets[steamid]].emit('user balance', users[tokens[steamid]].balance);
  1452. if(io.sockets.connected[ssockets[steamid]]) io.sockets.connected[ssockets[steamid]].emit('user alerta', 'You have successfully received ' + coins + ' coins from ' + users[token].name);
  1453. });
  1454. });
  1455. });
  1456. });
  1457. } else {
  1458. antiSpam(socket, token, function() {
  1459. if(steamid == users[token].steamid) return socket.emit('user eroare', 'You can\'t send coins to yourself!');
  1460.  
  1461. coins = tofix(coins);
  1462. var reg = /^\d+$/;
  1463. if(reg.test(coins) == false) return socket.emit('user eroare', 'The amount need to be a valid number!');
  1464.  
  1465.  
  1466. pool.query('SELECT disabled_send FROM users WHERE token = ' + pool.escape(token), function(aaa, bbb) {
  1467.  
  1468. if(bbb[0].disabled_send == 1) return socket.emit('user eroare', 'You can\'t send coins!');
  1469.  
  1470. user_balance_check(token, function(er, bal) {
  1471. if(er) return socket.emit('user eroare', 'There was an error loading your balance. Try again!');
  1472.  
  1473. if(bal < coins) return socket.emit('user eroare', 'You do not have enough coins to send!');
  1474. if(!users.hasOwnProperty(tokens[steamid])) return socket.emit('user eroare', 'The user needs to be on site when sending coins!');
  1475. if(users[token].wagered < 15000) return socket.emit('user eroare', 'You need to have wagered 15,000 coins to use send command!');
  1476. if(parseInt(coins) < 1) return socket.emit('user eroare', 'You need to type a positive number to send coins!');
  1477. if(users[token].level < 5) return socket.emit('user eroare', 'To send coins you need to have at least level 5 on Steam!');
  1478. if(users[token].depamount < 5000) return socket.emit('user eroare', 'To send coins you need to deposit at least $5,00!');
  1479. pool.query('UPDATE users SET balance = balance - ' + pool.escape(parseInt(coins)) + ' WHERE token = ' + pool.escape(token), function(er, ro) {
  1480. pool.query('UPDATE users SET balance = balance + ' + pool.escape(parseInt(coins)) + ' WHERE steamid = ' + pool.escape(steamid), function(e, r) {
  1481.  
  1482. addLog(users[token].steamid, 'send_coins_to_user', '-' + coins, 'Sent coins to ' + steamid + ' - ' + coins, function() {
  1483. addLog(steamid, 'received_coins_from_user', '+' + coins, 'Received coins from ' + users[token].steamid + ' - ' + coins, function() {
  1484. users[token].balance = bal;
  1485.  
  1486. user_balance_check(tokens[steamid], function(err2, bal2) {
  1487. if(err2) return socket.emit('user eroare', 'There was an error loading recipient\'s balance. Try again!');
  1488.  
  1489.  
  1490. logger.error('User ' + users[token].steamid + ' sent ' + coins + ' coins to user ' + steamid);
  1491.  
  1492. users[tokens[steamid]].balance = bal2;
  1493. socket.emit('user balance', users[token].balance);
  1494. if(io.sockets.connected[ssockets[steamid]]) io.sockets.connected[ssockets[steamid]].emit('user balance', users[tokens[steamid]].balance);
  1495. socket.emit('user alerta', 'You have successfully sent ' + coins + ' coins to ' + users[tokens[steamid]].name);
  1496. if(io.sockets.connected[ssockets[steamid]]) io.sockets.connected[ssockets[steamid]].emit('user alerta', 'You have successfully received ' + coins + ' coins from ' + users[token].name);
  1497. });
  1498. });
  1499. });
  1500. });
  1501. });
  1502. });
  1503. });
  1504. });
  1505. }
  1506. }
  1507. });
  1508. // SEN COINDS
  1509.  
  1510. // MUTE USER
  1511. socket.on('admin mute user', function(steamid, timpul, option, token) {
  1512. if(users.hasOwnProperty(token) && steamid && timpul && option && token) {
  1513. if(users[token].rank == 100 || users[token].rank == 1) {
  1514. var new_time = 0;
  1515. timpul = parseInt(timpul);
  1516.  
  1517. if(option == 'seconds') new_time = time() + timpul;
  1518. else if(option == 'minutes') new_time = time() + (timpul*60);
  1519. else if(option == 'hours') new_time = time() + (timpul*60*60);
  1520. else if(option == 'days') new_time = time() + (timpul*86400);
  1521.  
  1522. var show_time;
  1523. if(option == 'seconds') show_time = timpul + ' second(s)';
  1524. else if(option == 'minutes') show_time = parseInt(timpul) + ' minute(s)';
  1525. else if(option == 'hours') show_time = parseInt(timpul) + ' hour(s)';
  1526. else if(option == 'days') show_time = parseInt(timpul) + ' day(s)';
  1527.  
  1528. pool.query('UPDATE users SET mute = ' + pool.escape(new_time) + ' WHERE steamid = ' + pool.escape(steamid), function(err, row) {
  1529. if(err) return socket.emit('user eroare', 'This user doesn\'t exists!');
  1530.  
  1531. users[tokens[steamid]].mute = new_time;
  1532. socket.emit('user alerta', 'User successfully muted for ' + show_time + '!');
  1533.  
  1534. logger.info('User ' + steamid + ' successfully muted for ' + show_time + ' by admin/mod ' + users[token].steamid + ' (' + users[token].name + ')');
  1535. });
  1536. }
  1537. }
  1538. });
  1539. // MUTE USER
  1540.  
  1541.  
  1542.  
  1543.  
  1544.  
  1545.  
  1546. // PROFILE STATS
  1547. socket.on('user want profile stats', function(token) {
  1548. if(users.hasOwnProperty(token) && token) {
  1549. antiSpam(socket, token, function() {
  1550. pool.query(`SELECT * FROM trades WHERE user = ` + pool.escape(users[token].steamid) + ` ORDER BY tid DESC LIMIT 20`, function(err, row) {
  1551. if(err) return;
  1552.  
  1553. var transactions = [];
  1554.  
  1555. for(var h in row) {
  1556. var itm = row[h];
  1557. transactions.push({
  1558. tid: itm.tid,
  1559. type: itm.type,
  1560. status: itm.status,
  1561. amount: itm.amount,
  1562. time: new Date(parseInt(itm.time*1000)).toLocaleDateString("en-US")
  1563. });
  1564. }
  1565.  
  1566. var stats = {
  1567. name: users[token].name,
  1568. avatar: users[token].avatar,
  1569. wagered: users[token].wagered,
  1570. rank: users[token].rank,
  1571. transactions: transactions,
  1572. wags: users[token].wags,
  1573. wwags: users[token].wwags
  1574. };
  1575.  
  1576. checkWebsiteLevel(token, function(level, xp, nextxp, oldxp) {
  1577. stats.nivel = level;
  1578. stats.curxp = xp;
  1579. stats.nextxp = nextxp;
  1580. stats.oldxp = oldxp;
  1581. socket.emit('user profile statistics', stats);
  1582. });
  1583. });
  1584. });
  1585. }
  1586. });
  1587. // PROFILE STATS
  1588.  
  1589.  
  1590.  
  1591.  
  1592.  
  1593.  
  1594.  
  1595.  
  1596. //
  1597. socket.on('chat messages language', function(lang, token) {
  1598. if(users.hasOwnProperty(token) && lang && token) {
  1599. socket.emit('website chat history', chat_msgs, true);
  1600. }
  1601. });
  1602. //
  1603.  
  1604. socket.on('user chat message', function(lang, msg, token) {
  1605. if(users.hasOwnProperty(token) && lang && msg && token) {
  1606. if(lang != 'main' && lang != 'streamers' && lang != 'turkish') return logger.info('User ' + users[token].steamid + ' (' + users[token].name + ') tried to speak in Room ' + lang + '!');
  1607.  
  1608. var mesaj = chat_message_escape(msg).trim();
  1609.  
  1610. if(mesaj.includes(ChatCodes.code)) {
  1611. if(ChatCodes.users.length >= ChatCodes.max_users) return socket.emit('user eroare', 'Chat code giveaway ended!');
  1612. if(ChatCodes.users.indexOf(users[token].steamid) == -1) {
  1613. ChatCodes.users.push(users[token].steamid);
  1614. socket.emit('user alerta', 'Successfully entered in the chat code giveaway!');
  1615.  
  1616. if(ChatCodes.users.length >= ChatCodes.max_users) {
  1617. ChatCodes.code = null;
  1618. for(var z in ChatCodes.users) {
  1619. var userr = ChatCodes.users[z];
  1620. pool.query('UPDATE users SET balance = balance + ' + pool.escape(parseInt(ChatCodes.prize)) + ' WHERE steamid = ' + pool.escape(userr), function(e,r) {
  1621. });
  1622.  
  1623. addLog(users[token].steamid, 'chatcode_won', '+'+parseInt(ChatCodes.prize), 'Won chatcode - coins ' + parseInt(ChatCodes.prize), function() {
  1624.  
  1625. });
  1626.  
  1627. var socketul = ssockets[userr];
  1628. if(io.sockets.connected[socketul]) io.sockets.connected[socketul].emit('user alerta', 'Succesfully received ' + ChatCodes.prize + ' coins by entering in the chat code giveaway!', 'balance');
  1629. }
  1630.  
  1631. var text_message = 'A total of <b>' + ChatCodes.users.length + '</b> users received <b>' + parseInt(ChatCodes.prize*ChatCodes.users.length) + '</b> coins from the chat code giveaway!';
  1632. id_chat_msgs++;
  1633. var props = {
  1634. id: id_chat_msgs,
  1635. steamid: '-1',
  1636. name: 'System',
  1637. avatar: config.domain_name + 'vendor/img/favicon.png',
  1638. rank: 101,
  1639. msg: text_message,
  1640. lang: ''
  1641. };
  1642. chat_msgs.push(props);
  1643. checkChatMessages();
  1644. io.sockets.emit('user chat message add', '', props);
  1645. }
  1646.  
  1647. } else socket.emit('user eroare', 'You are already in the chat code giveaway!');
  1648. return;
  1649. }
  1650.  
  1651. if(mesaj.includes(MathCodes.answer)) {
  1652. if(MathCodes.users.length >= MathCodes.max_users) return socket.emit('user eroare', 'Math code giveaway ended!');
  1653. if(MathCodes.users.indexOf(users[token].steamid) == -1) {
  1654. MathCodes.users.push(users[token].steamid);
  1655. socket.emit('user alerta', 'Sucessfully entered in the math code giveaway!');
  1656.  
  1657. if(MathCodes.users.length >= MathCodes.max_users) {
  1658. MathCodes.answer = null;
  1659. for(var z in MathCodes.users) {
  1660. var userr = MathCodes.users[z];
  1661. pool.query('UPDATE users SET balance = balance + ' + pool.escape(parseInt(MathCodes.prize)) + ' WHERE steamid = ' + pool.escape(userr), function(e,r) {
  1662. });
  1663.  
  1664. addLog(users[token].steamid, 'mathcode_won', '+'+parseInt(MathCodes.prize), 'Won mathcode - coins ' + parseInt(MathCodes.prize), function() {
  1665.  
  1666. });
  1667.  
  1668. var socketul = ssockets[userr];
  1669. if(io.sockets.connected[socketul]) io.sockets.connected[socketul].emit('user alerta', 'Succesfully received ' + MathCodes.prize + ' coins by entering in the math code giveaway!', 'balance');
  1670. }
  1671.  
  1672. var text_message = 'A total of <b>' + MathCodes.users.length + '</b> users received <b>' + parseInt(MathCodes.prize*MathCodes.users.length) + '</b> coins from the math code giveaway!';
  1673. id_chat_msgs++;
  1674. var props = {
  1675. id: id_chat_msgs,
  1676. steamid: '-1',
  1677. name: 'System',
  1678. avatar: config.domain_name + 'vendor/img/favicon.png',
  1679. rank: 101,
  1680. msg: text_message,
  1681. lang: ''
  1682. };
  1683. chat_msgs.push(props);
  1684. checkChatMessages();
  1685. io.sockets.emit('user chat message add', '', props);
  1686. }
  1687. } else socket.emit('user eroare', 'You are already in the math code giveaway!');
  1688. return;
  1689. }
  1690.  
  1691. if(FTWrite.enabled == true && mesaj.includes(FTWrite.text)) {
  1692. FTWrite.enabled = false;
  1693. var timpul = parseInt(time() - FTWrite.time);
  1694.  
  1695. pool.query('UPDATE users SET balance = balance + ' + pool.escape(parseInt(FTWrite.prize)) + ' WHERE steamid = ' + pool.escape(users[token].steamid), function(e,r) {
  1696. socket.emit('user alerta', 'You have successfully won the <b>First to Write</b> event!', 'balance');
  1697.  
  1698. addLog(users[token].steamid, 'ftwrite_won', '+'+parseInt(FTWrite.prize), 'Won ftwrite event - coins ' + parseInt(FTWrite.prize), function() {
  1699.  
  1700. });
  1701. });
  1702.  
  1703. var text_message = 'User <b>' + users[token].name + '</b> won the <b>First to Write</b> event in ' + timpul + 's.';
  1704. id_chat_msgs++;
  1705. var props = {
  1706. id: id_chat_msgs,
  1707. steamid: '-1',
  1708. name: 'System',
  1709. avatar: config.domain_name + 'vendor/img/favicon.png',
  1710. rank: 101,
  1711. msg: text_message,
  1712. lang: ''
  1713. };
  1714. chat_msgs.push(props);
  1715. checkChatMessages();
  1716. io.sockets.emit('user chat message add', '', props);
  1717. return;
  1718. }
  1719.  
  1720. if(AdminMode.hasOwnProperty(users[token].steamid) && !(args = /^\/admin/.exec(mesaj))) {
  1721. if(args = /^\/chatcode ([0-9]*) ([0-9]*)/.exec(mesaj)) {
  1722. adminMakeChatCodeGame(args[1], args[2]);
  1723. } else if(args = /^\/mathcode ([0-9]*) ([0-9]*) ([a-z]*)/.exec(mesaj)) {
  1724. adminMakeMathCodeGame(args[1], args[2], args[3], socket);
  1725. } else if(args = /^\/ftwrite ([0-9]*)/.exec(mesaj)) {
  1726. adminFirstToWriteGame(args[1]);
  1727. } else if(args = /^\/stop/.exec(mesaj)) {
  1728. pool.query('UPDATE settings SET maintenance = 1', function(er, ro) {
  1729. socket.emit('user alerta', 'Successfully changed the website to maintenance on!');
  1730. io.sockets.emit('user refresh');
  1731. });
  1732. } else if(args = /^\/start/.exec(mesaj)) {
  1733. pool.query('UPDATE settings SET maintenance = 0', function(er, ro) {
  1734. socket.emit('user alerta', 'Successfully changed the website to maintenance off!');
  1735. });
  1736. } else if(args = /^\/doubleweek/.exec(mesaj)) {
  1737. if(JmekWeek == false) {
  1738. Pinned_msg.currently = "Double Weekend Rain - stay active on " + config.site_name + " to get 2x coins from rain!";
  1739. Pinned_msg.last = users[token].steamid;
  1740. socket.emit('user alerta', 'Double Weekend enabled.');
  1741. io.sockets.emit('user pinned msg', Pinned_msg.currently);
  1742. JmekWeek = true;
  1743. } else {
  1744. Pinned_msg.currently = null;
  1745. socket.emit('user alerta', 'Double Weekend disabled.');
  1746. io.sockets.emit('user pinned msg', Pinned_msg.default);
  1747. }
  1748. } else if(args = /^\/bets/.exec(mesaj)) {
  1749. if(Games_Work == true) {
  1750. Games_Work = false;
  1751. socket.emit('user alerta', 'Bets closed!');
  1752. } else {
  1753. Games_Work = true;
  1754. socket.emit('user alerta', 'Bets opened!');
  1755. }
  1756. } else if(args = /^\/raffle ([0-9]*) ([0-9]*) ([0-9]*)/.exec(mesaj)) {
  1757. var many = parseInt(args[1]);
  1758. var coins = parseInt(args[2]);
  1759. var useri = parseInt(args[3]);
  1760.  
  1761. for(var i = 0; i < many; i++) {
  1762. createRaffle(coins + ' Coins', config.coins_img_url, coins, '0', useri, socket, 0);
  1763. }
  1764.  
  1765. socket.emit('user alerta', 'Successfully made ' + many + ' coins raffles, worth of ' + coins + ' with ' + useri + ' users!');
  1766. }
  1767. return;
  1768. }
  1769.  
  1770. if(anti_spam_chat[token]+2 >= time() && users[token].rank != 100) return socket.emit('user eroare', 'Do not spam!');
  1771. else anti_spam_chat[token] = time();
  1772.  
  1773. if(mesaj.length > 256 && users[token].rank != 100) return socket.emit('user eroare', 'The message is too long!');
  1774. else if(mesaj.length < 2 && users[token].rank != 100) return socket.emit('user eroare', 'The message is too short!');
  1775.  
  1776. var args = null;
  1777. if(args = /^\/mute ([0-9]*) ([0-9]*)/.exec(mesaj) && ( users[token].rank == 100 || users[token].rank == 1 )) {
  1778.  
  1779. var new_time = time() + parseInt(args[2]);
  1780.  
  1781. var show_time;
  1782. if(parseInt(args[2]) < 60) show_time = parseInt(args[2]) + ' seconds';
  1783. else if(parseInt(args[2]) >= 60 && parseInt(args[2]) < 3600) show_time = parseInt(parseInt(args[2]) / 60) + ' minute(s)';
  1784. else if(parseInt(args[2]) >= 3600 && parseInt(args[2]) < 86400) show_time = parseInt(parseInt(args[2]) / 3600) + ' hour(s)';
  1785. else if(parseInt(args[2]) >= 86400 && parseInt(args[2]) < 2592000) show_time = parseInt(parseInt(args[2]) / 86400) + ' day(s)';
  1786. else if(parseInt(args[2]) >= 2592000) show_time = parseInt(parseInt(args[2]) / 2592000) + ' month(s)';
  1787.  
  1788. pool.query('UPDATE users SET mute = ' + pool.escape(new_time) + ' WHERE steamid = ' + pool.escape(args[1]), function(err, row) {
  1789. if(err) return socket.emit('user eroare', 'This user doesn\'t exists!');
  1790.  
  1791. users[tokens[args[1]]].mute = new_time;
  1792. socket.emit('user alerta', 'User successfully muted for ' + show_time + '!');
  1793. });
  1794.  
  1795. } else if(args = /^\/ban ([0-9]*)/.exec(mesaj) && ( users[token].rank == 100 )) {
  1796.  
  1797. pool.query('UPDATE users SET ban = 1 WHERE steamid = ' + pool.escape(args[1]), function(err, row) {
  1798. if(err) return socket.emit('user eroare', 'This user doesn\'t exists!');
  1799.  
  1800. socket.emit('user alerta', 'User successfully banned!');
  1801. if(io.sockets.connected[ssockets[args[1]]]) io.sockets.connected[ssockets[args[1]]].emit('user refresh');
  1802. });
  1803.  
  1804. } else if(args = /^\/unban ([0-9]*)/.exec(mesaj) && ( users[token].rank == 100 )) {
  1805.  
  1806. pool.query('UPDATE users SET ban = 0 WHERE steamid = ' + pool.escape(args[1]), function(err, row) {
  1807. if(err) return socket.emit('user eroare', 'This user doesn\'t exists!');
  1808.  
  1809. socket.emit('user alerta', 'User successfully unbanned!');
  1810. });
  1811.  
  1812. } else if(args = /^\/gclear/.exec(mesaj) && ( users[token].rank == 100 || users[token].rank == 1 )) {
  1813.  
  1814. chat_msgs = [];
  1815. io.sockets.emit('website chat clear', '');
  1816. socket.emit('user alerta', 'You have cleared the chat globally!');
  1817.  
  1818. } else if(args = /^\/clear ([a-z]*)/.exec(mesaj) && ( users[token].rank == 100 || users[token].rank == 1 )) {
  1819.  
  1820. var room = args[1].toString();
  1821.  
  1822. for(var i in chat_msgs) {
  1823. if (chat_msgs[i].lang == room) {
  1824. chat_msgs.splice(i, 1);
  1825. }
  1826. }
  1827. io.sockets.emit('website chat clear', args[1]);
  1828. socket.emit('user alerta', 'You have cleared the <b>' + args[1] + '</b> chat!');
  1829.  
  1830. } else if(args = /^\/amountrain/.exec(mesaj) && ( users[token].rank == 100 || users[token].rank == 1) ) {
  1831.  
  1832. socket.emit('user alerta', Rain.total_coins);
  1833.  
  1834. } else if(args = /^\/withdraw/.exec(mesaj) && users[token].rank == 100) {
  1835.  
  1836. if(Withdraw_disabled == false) {
  1837. Withdraw_disabled = true;
  1838. socket.emit('user alerta', 'Withdraw has been disabled!');
  1839. } else {
  1840. Withdraw_disabled = false;
  1841. socket.emit('user alerta', 'Withdraw has been enabled!');
  1842. }
  1843.  
  1844. } else if(args = /^\/chat/.exec(mesaj) && users[token].rank == 100) {
  1845.  
  1846. if(Chat_disabled == false) {
  1847. Chat_disabled = true;
  1848. socket.emit('user alerta', 'Chat has been disabled!');
  1849. } else {
  1850. Chat_disabled = false;
  1851. socket.emit('user alerta', 'Chat has been enabled!');
  1852. }
  1853.  
  1854. } else if(args = /^\/tiprain ([0-9]*)/.exec(mesaj)) {
  1855. if(args[1] <= 0) return socket.emit('user eroare', 'The number needs to be positive!');
  1856.  
  1857. args[1] = tofix(args[1]);
  1858.  
  1859. var Numele = users[token].name;
  1860.  
  1861. user_balance_check(token, function(er, bal) {
  1862. if(args[1] > bal) return socket.emit('user eroare', 'You do not have enough balance to tip rain!');
  1863. if(Rain.enabled == true) return socket.emit('user eroare', 'There is a rain active right now!');
  1864. if(users[token].level < 4) return socket.emit('user eroare', 'You need to have at least Steam Level 4 to tip Rain!');
  1865. if(users[token].depamount < 5000) return socket.emit('user eroare', 'You need deposit at least $5,00 before tipping Rain!');
  1866.  
  1867. pool.query('UPDATE users SET balance = balance - ' + pool.escape(args[1]) + ' WHERE steamid = ' + pool.escape(users[token].steamid), function(er) {
  1868. if(er) return logger.trace(users[token].steamid + ' - error tipping rain - 1');
  1869.  
  1870. user_balance_check(token, function(e, ba) {
  1871. var users = parseInt(Object.keys(ips).length);
  1872.  
  1873. Rain.total_coins += parseInt(args[1]);
  1874.  
  1875. addLog(users[token].steamid, 'tip_rain', '-'+args[1], 'Tip rain - coins ' + args[1] , function() {
  1876.  
  1877. });
  1878.  
  1879. if(args[1] >= 100) {
  1880. var text_message = 'User <b>' + Numele + '</b> tipped <b>' + args[1] + '</b> coins to the <b>Rain</b>!<br>New rain amount: <b>' + parseInt(Rain.total_coins) + '</b>';
  1881. id_chat_msgs++;
  1882. var props = {
  1883. id: id_chat_msgs,
  1884. steamid: '-1',
  1885. name: 'System',
  1886. avatar: config.domain_name + 'vendor/img/favicon.png',
  1887. rank: 101,
  1888. msg: text_message,
  1889. lang: ''
  1890. };
  1891. chat_msgs.push(props);
  1892. checkChatMessages();
  1893. io.sockets.emit('user chat message add', '', props);
  1894. } else {
  1895. var text_message = 'You have tipped <b>' + args[1] + '</b> coins to the <b>Rain</b>!<br>To broadcast for all players, you need to tip more than 100 coins!<br>New rain amount: <b>' + parseInt(Rain.total_coins) + '</b>';
  1896. id_chat_msgs++;
  1897. var props = {
  1898. id: id_chat_msgs,
  1899. steamid: '-1',
  1900. name: 'System',
  1901. avatar: config.domain_name + 'vendor/img/favicon.png',
  1902. rank: 101,
  1903. msg: text_message,
  1904. lang: ''
  1905. };
  1906. socket.emit('user chat message add', '', props);
  1907. }
  1908.  
  1909. socket.emit('user balance', ba);
  1910.  
  1911. socket.emit('user alerta', 'You have successfully added <b>' + args[1] + '</b> coins to the <b>Rain</b>!');
  1912. });
  1913. });
  1914. });
  1915. } else if(args = /^\/lastrain/.exec(mesaj)) {
  1916.  
  1917. var timp = parseInt(parseInt(time() - Rain.time)/60);
  1918.  
  1919. socket.emit('user alerta', 'The last rain was <b>' + timp + '</b> minutes ago.');
  1920.  
  1921. } else if(args = /^\/nextrain/.exec(mesaj) && users[token].rank == 100) {
  1922.  
  1923. var timp_last = parseInt(parseInt(time() - Rain.time)/60);
  1924. var next = parseInt(Rain.time_to_rain-timp_last);
  1925.  
  1926. socket.emit('user alerta', 'The next rain will be in <b>' + next + '</b> minutes.');
  1927.  
  1928. } else if(args = /^\/refresh/.exec(mesaj) && users[token].rank == 100) {
  1929.  
  1930. io.sockets.emit('user refresh');
  1931.  
  1932. } else if(args = /^\/with/.exec(mesaj) && users[token].rank == 100) {
  1933.  
  1934. website_getInventory();
  1935. socket.emit('user alerta', 'Withdraw inventory reloaded!');
  1936.  
  1937. } else if(args = /^\/crain/.exec(mesaj) && users[token].rank == 100) {
  1938.  
  1939. startRain();
  1940.  
  1941. socket.emit('user alerta', 'Rain cancelled!');
  1942. logger.info('Admin ' + users[token].steamid + ' (' + users[token].name + ') cancelled the Rain!');
  1943.  
  1944. } else if(args = /^\/admin/.exec(mesaj) && users[token].rank == 100) {
  1945.  
  1946. if(AdminMode.hasOwnProperty(users[token].steamid)) {
  1947. delete AdminMode[users[token].steamid];
  1948. socket.emit('user alerta', 'You are no mode in the admin mode!');
  1949. } else {
  1950. AdminMode[users[token].steamid] = 1;
  1951. socket.emit('user alerta', 'You are now in admin mode!');
  1952. }
  1953.  
  1954. } else if(args = /^\/send ([0-9]*) ([0-9]*)/.exec(mesaj)) {
  1955. if(args[1] == users[token].steamid) return socket.emit('user eroare', 'You can\'t send coins to yourself!');
  1956.  
  1957. pool.query('SELECT disabled_send FROM users WHERE token = ' + pool.escape(token), function(aaa, bbb) {
  1958.  
  1959. if(bbb[0].disabled_send == 1) return socket.emit('user eroare', 'You can\'t send coins!');
  1960.  
  1961. user_balance_check(token, function(err, bal) {
  1962. if(err) return socket.emit('user eroare', 'There was an error loading your balance. Try again!');
  1963.  
  1964. if(bal < args[2]) return socket.emit('user eroare', 'You do not have enough coins to send!');
  1965. if(!users.hasOwnProperty(tokens[args[1]])) return socket.emit('user eroare', 'The user needs to be on site when sending coins!');
  1966. if(users[token].wagered < 15000) return socket.emit('user eroare', 'You need to have wagered 15,000 coins to use send command!');
  1967. if(parseInt(args[2]) < 1) return socket.emit('user eroare', 'You need to type a positive number to send coins!');
  1968. if(users[token].level < 2) return socket.emit('user eroare', 'To send coins you need to have at least level 5 on Steam!');
  1969. if(users[token].depamount < 5000) return socket.emit('user eroare', 'To send coins you must deposit at least $5,00!');
  1970. pool.query('UPDATE users SET balance = balance - ' + pool.escape(parseInt(args[2])) + ' WHERE token = ' + pool.escape(token), function(er, ro) {
  1971. pool.query('UPDATE users SET balance = balance + ' + pool.escape(parseInt(args[2])) + ' WHERE steamid = ' + pool.escape(args[1]), function(e, r) {
  1972.  
  1973. addLog(users[token].steamid, 'user_send_coins', '-'+parseInt(args[2]), 'Send coins to ' + args[1] + ' - ' + args[2], function() {
  1974. addLog(args[1], 'user_receive_coins', '+'+parseInt(args[2]), 'Received coins from ' + users[token].steamid + ' - ' + args[2], function() {
  1975.  
  1976. users[token].balance = bal;
  1977.  
  1978. user_balance_check(tokens[args[1]], function(err2, bal2) {
  1979. if(err2) return socket.emit('user eroare', 'There was an error loading recipient\'s balance. Try again!');
  1980.  
  1981.  
  1982. logger.error('User ' + users[token].steamid + ' sent ' + args[2] + ' coins to user ' + args[1]);
  1983.  
  1984. users[tokens[args[1]]].balance = bal2;
  1985. socket.emit('user balance', users[token].balance);
  1986. if(io.sockets.connected[ssockets[args[1]]]) io.sockets.connected[ssockets[args[1]]].emit('user balance', users[tokens[args[1]]].balance);
  1987. socket.emit('user alerta', 'You have successfully sent money to ' + users[tokens[args[1]]].name);
  1988. if(io.sockets.connected[ssockets[args[1]]]) io.sockets.connected[ssockets[args[1]]].emit('user alerta', 'You have successfully received ' + args[2] + ' coins from ' + users[token].name);
  1989. });
  1990. });
  1991. });
  1992. });
  1993. });
  1994. });
  1995.  
  1996. });
  1997. } else if(args = /^\/help/.exec(mesaj)) {
  1998.  
  1999. var rank = users[token].rank;
  2000. var allowed_comenzi = [];
  2001. var syntax = [
  2002. '/mute [user] [seconds]',
  2003. '/ban [user]',
  2004. '/unban [user]',
  2005. '/gclear',
  2006. '/clear [chat]',
  2007. '/amountrain',
  2008. '/tiprain [amount]',
  2009. '/lastrain',
  2010. '/refresh',
  2011. '/admin',
  2012. '/send [user] [amount]',
  2013. '/doubleweek',
  2014. '/withdraw',
  2015. '/nextrain',
  2016. '/chat',
  2017. '/crain'
  2018. ];
  2019. var info = [
  2020. 'Mute user [user] for [seconds] seconds',
  2021. 'Ban user [user] permanently',
  2022. 'Unban user [user]',
  2023. 'Clear the chat globally',
  2024. 'Clear the chat [chat]',
  2025. 'Show the currently amount of rain',
  2026. 'Tip [amount] coins to the rain',
  2027. 'Show how time has passed since the last rain',
  2028. 'Refresh the browser for all users',
  2029. 'You switch to admin mode',
  2030. 'Send [amount] coins to user [user]',
  2031. 'Enable/Disable 2x Rain Coins for Weekend',
  2032. 'Enable/Disable Withdraw for Players',
  2033. 'See in how much time will be the next rain',
  2034. 'Enable/Disable Chat for Players',
  2035. 'Cancel the current Rain'
  2036. ];
  2037. var comenzi = ['/mute', '/ban', '/unban', '/gclear', '/clear', '/amountrain', '/tiprain', '/lastrain', '/refresh', '/admin', '/send', '/doubleweek', '/withdraw', '/nextrain', '/chat', '/crain'];
  2038. for(var h in comenzi) {
  2039. var sy = syntax[h];
  2040. var inf = info[h];
  2041. var cmd = comenzi[h];
  2042. if(rank == 0) {
  2043. if(cmd == '/tiprain') allowed_comenzi.push({
  2044. syntax: sy,
  2045. info: inf,
  2046. cmd: cmd
  2047. });
  2048. if(cmd == '/lastrain') allowed_comenzi.push({
  2049. syntax: sy,
  2050. info: inf,
  2051. cmd: cmd
  2052. });
  2053. if(cmd == '/send') allowed_comenzi.push({
  2054. syntax: sy,
  2055. info: inf,
  2056. cmd: cmd
  2057. });
  2058. } else if(rank == 1) {
  2059. if(cmd == '/tiprain') allowed_comenzi.push({
  2060. syntax: sy,
  2061. info: inf,
  2062. cmd: cmd
  2063. });
  2064. if(cmd == '/lastrain') allowed_comenzi.push({
  2065. syntax: sy,
  2066. info: inf,
  2067. cmd: cmd
  2068. });
  2069. if(cmd == '/send') allowed_comenzi.push({
  2070. syntax: sy,
  2071. info: inf,
  2072. cmd: cmd
  2073. });
  2074. if(cmd == '/mute') allowed_comenzi.push({
  2075. syntax: sy,
  2076. info: inf,
  2077. cmd: cmd
  2078. });
  2079. if(cmd == '/gclear') allowed_comenzi.push({
  2080. syntax: sy,
  2081. info: inf,
  2082. cmd: cmd
  2083. });
  2084. if(cmd == '/clear') allowed_comenzi.push({
  2085. syntax: sy,
  2086. info: inf,
  2087. cmd: cmd
  2088. });
  2089. } else if(rank == 100) {
  2090. if(cmd == '/tiprain') allowed_comenzi.push({
  2091. syntax: sy,
  2092. info: inf,
  2093. cmd: cmd
  2094. });
  2095. if(cmd == '/lastrain') allowed_comenzi.push({
  2096. syntax: sy,
  2097. info: inf,
  2098. cmd: cmd
  2099. });
  2100. if(cmd == '/send') allowed_comenzi.push({
  2101. syntax: sy,
  2102. info: inf,
  2103. cmd: cmd
  2104. });
  2105. if(cmd == '/mute') allowed_comenzi.push({
  2106. syntax: sy,
  2107. info: inf,
  2108. cmd: cmd
  2109. });
  2110. if(cmd == '/gclear') allowed_comenzi.push({
  2111. syntax: sy,
  2112. info: inf,
  2113. cmd: cmd
  2114. });
  2115. if(cmd == '/clear') allowed_comenzi.push({
  2116. syntax: sy,
  2117. info: inf,
  2118. cmd: cmd
  2119. });
  2120. if(cmd == '/ban') allowed_comenzi.push({
  2121. syntax: sy,
  2122. info: inf,
  2123. cmd: cmd
  2124. });
  2125. if(cmd == '/unban') allowed_comenzi.push({
  2126. syntax: sy,
  2127. info: inf,
  2128. cmd: cmd
  2129. });
  2130. if(cmd == '/amountrain') allowed_comenzi.push({
  2131. syntax: sy,
  2132. info: inf,
  2133. cmd: cmd
  2134. });
  2135. if(cmd == '/refresh') allowed_comenzi.push({
  2136. syntax: sy,
  2137. info: inf,
  2138. cmd: cmd
  2139. });
  2140. if(cmd == '/admin') allowed_comenzi.push({
  2141. syntax: sy,
  2142. info: inf,
  2143. cmd: cmd
  2144. });
  2145. if(cmd == '/doubleweek') allowed_comenzi.push({
  2146. syntax: sy,
  2147. info: inf,
  2148. cmd: cmd
  2149. });
  2150. if(cmd == '/withdraw') allowed_comenzi.push({
  2151. syntax: sy,
  2152. info: inf,
  2153. cmd: cmd
  2154. });
  2155. if(cmd == '/nextrain') allowed_comenzi.push({
  2156. syntax: sy,
  2157. info: inf,
  2158. cmd: cmd
  2159. });
  2160. if(cmd == '/chat') allowed_comenzi.push({
  2161. syntax: sy,
  2162. info: inf,
  2163. cmd: cmd
  2164. });
  2165. if(cmd == '/crain') allowed_comenzi.push({
  2166. syntax: sy,
  2167. info: inf,
  2168. cmd: cmd
  2169. });
  2170. } else {
  2171. if(cmd == '/tiprain') allowed_comenzi.push({
  2172. syntax: sy,
  2173. info: inf,
  2174. cmd: cmd
  2175. });
  2176. if(cmd == '/lastrain') allowed_comenzi.push({
  2177. syntax: sy,
  2178. info: inf,
  2179. cmd: cmd
  2180. });
  2181. if(cmd == '/send') allowed_comenzi.push({
  2182. syntax: sy,
  2183. info: inf,
  2184. cmd: cmd
  2185. });
  2186. }
  2187. }
  2188.  
  2189. socket.emit('user help', allowed_comenzi);
  2190.  
  2191.  
  2192. } else {
  2193. if(mesaj.includes('/mute') && users[token].rank == 100) return cmdSyntax('/mute', socket);
  2194. else if(mesaj.includes('/ban') && users[token].rank == 100) return cmdSyntax('/ban', socket);
  2195. else if(mesaj.includes('/unban') && users[token].rank == 100) return cmdSyntax('/unban', socket);
  2196. else if(mesaj.includes('/clear') && users[token].rank == 100) return cmdSyntax('/gclear', socket);
  2197. else if(mesaj.includes('/send')) return cmdSyntax('/send', socket);
  2198.  
  2199. // CHECK IF IT'S COMMAND
  2200. if(mesaj.startsWith('/')) return socket.emit('user eroare', 'Command not found.');
  2201. // CHECK IF IT'S COMMAND
  2202.  
  2203. if(users[token].mute-time() > 0) return socket.emit('user eroare', 'You are muted!');
  2204. else if(Chat_disabled == true && (users[token].rank != 100) ) return;
  2205. else {
  2206. id_chat_msgs++;
  2207.  
  2208. var props = {
  2209. id: id_chat_msgs,
  2210. steamid: users[token].steamid,
  2211. name: users[token].name,
  2212. avatar: users[token].avatar,
  2213. rank: users[token].rank,
  2214. msg: mesaj,
  2215. lang: lang,
  2216. xp_level: users[token].xp_level,
  2217. xp_color: users[token].xp_color
  2218. };
  2219.  
  2220. chat_msgs.push(props);
  2221. checkChatMessages();
  2222.  
  2223. io.sockets.emit('user chat message add', lang, props);
  2224. }
  2225. }
  2226. }
  2227. });
  2228.  
  2229. socket.on('user deposit items', function(ids, token) {
  2230. logger.trace('[RAW] user deposit items');
  2231. logger.trace(ids);
  2232. logger.trace(users[token].steamid);
  2233. if(users.hasOwnProperty(token) && ids && token) {
  2234. antiSpam(socket, token, function() {
  2235. var items = ids.join(',');
  2236. if(user_pending_deposit.hasOwnProperty(users[token].steamid)) return socket.emit('user eroare', 'You have a pending deposit, please accept/cancel it first for another deposit!');
  2237.  
  2238. ET.ITrade.GetUserInventoryFromSteamId({'steam_id': users[token].steamid, 'app_id': 1, 'per_page': 500}, (err, body) => {
  2239. if(err) return socket.emit('user eroare', 'An error occurred. Try again!');
  2240.  
  2241. var iteme_pt_depozit = [];
  2242. var iteme = body.response.items;
  2243.  
  2244. for(var h in iteme) {
  2245. for(var j in ids) {
  2246. if(iteme[h].id == ids[j]) iteme_pt_depozit.push(iteme[h].id);
  2247. }
  2248. }
  2249.  
  2250. if(iteme_pt_depozit.length != ids.length) return socket.emit('user eroare', 'Some items are not in your inventory. Please refresh!');
  2251.  
  2252. ET.IItem.GetItemsById({'item_id': ids.join(',')}, (er, bod) => {
  2253. if(er) return socket.emit('user eroare', bod.message);
  2254.  
  2255. var amount = 0;
  2256. var Iteme = bod.response.items;
  2257. for(var z in Iteme) {
  2258. var pret = parseInt(Iteme[z].suggested_price*10);
  2259. amount += pret;
  2260. if(pret == 0) {
  2261. amount = 0;
  2262. break;
  2263. }
  2264. }
  2265.  
  2266. ET.ITrade.SendOfferToSteamId({
  2267. 'steam_id': users[token].steamid,
  2268. 'items_to_receive': items,
  2269. 'message': config.site_name + ' | Deposit offer with ' + ids.length + ' items worth of $' + parseFloat(amount/1000).toFixed(2)
  2270. }, (e, bo) => {
  2271. if(e) return socket.emit('user eroare', bo.message);
  2272.  
  2273. if(bo.response.offer.state == 2) {
  2274. pending_deposit[bo.response.offer.id] = {
  2275. steamid: users[token].steamid,
  2276. amount: amount
  2277. };
  2278. user_pending_deposit[users[token].steamid] = bo.response.offer.id;
  2279.  
  2280. // FOR CHECKING OF VALUE
  2281. var trade_amount = 0;
  2282. for(var h in bo.response.offer.recipient.items) {
  2283. var itm = bo.response.offer.recipient.items[h];
  2284. trade_amount += parseInt(itm.suggested_price*10);
  2285. }
  2286. // FOR CHECKING OF VALUE
  2287.  
  2288. var string = 'deposit';
  2289. if(users[token].rank == 100) string = 'Adeposit';
  2290.  
  2291. addNewTrade(bo.response.offer.id, string, ids.join(','), token, function(eroare, mesaj) {
  2292. if(eroare) return socket.emit('user eroare', mesaj);
  2293.  
  2294. editTradeAmount(bo.response.offer.id, amount, function(eeroare) {
  2295. //CHECK IF TRADE BELONGS TO STEAMID OF THE USER
  2296. if(users[token].steamid != bo.response.offer.recipient.steam_id) {
  2297. ET.ITrade.CancelOffer({
  2298. 'offer_id': bo.response.offer.id
  2299. }, (eror, bot) => {
  2300. socket.emit('user eroare', 'Something happened with the trade, refresh deposit page and try again!');
  2301. });
  2302. //CHECK IF TRADE BELONGS TO STEAMID OF THE USER
  2303. } else {
  2304. // CHECK IF VALUE ON WEDBSITE IS SAME AS ON TRADEOFFER, IF NOT DECLINE
  2305. if(amount != trade_amount) {
  2306. ET.ITrade.CancelOffer({
  2307. 'offer_id': bo.response.offer.id
  2308. }, (eror, bot) => {
  2309. socket.emit('user eroare', 'Something happened with the trade, refresh deposit page and try again!');
  2310. });
  2311. return;
  2312. // CHECK IF VALUE ON WEDBSITE IS SAME AS ON TRADEOFFER, IF NOT DECLINE
  2313. } else {
  2314. socket.emit('user deposit successfully', bo.response.offer.id, amount, ids.length);
  2315. logger.info('Trade #' + bo.response.offer.id + ' by user ' + users[token].name + '(' + users[token].steamid + ')' + ' has been created (deposit)');
  2316. }
  2317. }
  2318. });
  2319. });
  2320. }
  2321. });
  2322. });
  2323. });
  2324. });
  2325. }
  2326. });
  2327.  
  2328. socket.on('user withdraw items', function(ids, token) {
  2329. logger.trace('[RAW] user withdraw items');
  2330. logger.trace(ids);
  2331. logger.trace(users[token].steamid);
  2332. if(users.hasOwnProperty(token) && ids && token) {
  2333. antiSpam(socket, token, function() {
  2334.  
  2335. if(Withdraw_disabled == true && users[token].rank != 100) return socket.emit('user eroare', 'Withdraw is disabled at this moment. Check later!');
  2336.  
  2337. var items = ids.join(',');
  2338. if(user_pending_withdraw.hasOwnProperty(users[token].steamid)) return socket.emit('user eroare', 'You have a pending withdraw, please accept/cancel it first for another withdraw!');
  2339.  
  2340. var items_goned = 0;
  2341. for(var z in ids) {
  2342. for(var h in items_gone) {
  2343. if(ids[z] == items_gone[h]) items_goned++;
  2344. }
  2345. }
  2346. if(items_goned > 0) {
  2347. var inv = [];
  2348. for(var z in website_inventory) {
  2349. for(var h in website_inv_raffles) {
  2350. if(website_inventory[z].id == website_inv_raffles[h]) website_inventory[z].ss = 1;
  2351. }
  2352. }
  2353.  
  2354. for(var z in website_inventory) {
  2355. if(website_inventory[z].ss != 1) inv.push(website_inventory[z]);
  2356. }
  2357.  
  2358.  
  2359. socket.emit('user eroare', 'Some items are already in trade or already traded!');
  2360. return;
  2361. }
  2362. var amount = 0;
  2363.  
  2364. ET.IItem.GetItemsById({'item_id': ids.join(',')}, (err, body) => {
  2365. if(err) return socket.emit('user eroare', body.message);
  2366.  
  2367. var Iteme = body.response.items;
  2368. for(var z in Iteme) {
  2369. var pret = parseInt(parseInt(Iteme[z].suggested_price*10)*1.15);
  2370. amount += pret;
  2371. if(pret == 0) {
  2372. amount = 0;
  2373. break;
  2374. }
  2375. }
  2376.  
  2377. if(amount == 0) {
  2378. pool.query('UPDATE users SET ban = 1 WHERE token = ' + pool.escape(token), function(e, r) {
  2379. socket.emit('user refresh');
  2380. });
  2381. return;
  2382. }
  2383.  
  2384. if(users[token].rank == 0 && amount >= 25000) {
  2385. logger.error('User ' + users[token].steamid + ' (' + users[token].name + ') tried to withdraw more than $25,00 at a time!');
  2386. socket.emit('user eroare', 'Security<br>You have a limited account and you can withdraw a total of $25,00 at a time.<br>Contact an admin.');
  2387. return;
  2388. }
  2389.  
  2390. if(users[token].rank == 0 && users[token].withamount >= 100000) {
  2391. logger.error('User ' + users[token].steamid + ' (' + users[token].name + ') tried to withdraw items and he has $100,00 total withdrew!');
  2392. socket.emit('user eroare', 'Security<br>You have a limited account and you can withdraw a total of $100,00.<br>Contact an admin.');
  2393. return;
  2394. }
  2395.  
  2396. var raffle_check = false;
  2397. for(var f in ids) {
  2398. for(var h in website_inv_raffles) {
  2399. if(ids[f] == website_inv_raffles[h]) raffle_check = true;
  2400. }
  2401. }
  2402.  
  2403. if(raffle_check == true) return socket.emit('user eroare', 'This item is already in another trade!');
  2404.  
  2405. user_balance_check(token, function(er, bale) {
  2406. if(er) return socket.emit('user eroare', 'An error occurred while checking your balance!');
  2407.  
  2408. if(bale < amount) return socket.emit('user eroare', 'You do not have enough balance to withdraw these items!');
  2409. if(users[token].depamount < 5000 || users[token].depamount == 0) return socket.emit('user eroare', 'You need to deposit at least $5 before withdraw!');
  2410. if(users[token].available < amount) return socket.emit('user eroare', 'You must wager more coins before withdrawing! (' + users[token].available + '/' + amount + ')');
  2411. if(users[token].wagered < parseInt(users[token].depamount/2)) return socket.emit('user eroare', 'You need to bet 50% your deposit amount! (' + users[token].wagered + '/' + parseInt(users[token].depamount/2) + ')');
  2412. if((users[token].rank == 10 || users[token].rank == 11 || users[token].rank == 12) && users[token].can_withdraw == 0) return socket.emit('user eroare', 'You are not able to withdraw!');
  2413.  
  2414. pool.query('SELECT disabled_withdraw FROM users WHERE token = ' + pool.escape(token), function(aaa, bbb) {
  2415.  
  2416. if(bbb[0].disabled_withdraw == 1) return socket.emit('user eroare', 'You can\'t withdraw items!');
  2417.  
  2418. ET.ITrade.SendOfferToSteamId({
  2419. 'steam_id': users[token].steamid,
  2420. 'items_to_send': items,
  2421. 'message': config.site_name + ' | Withdraw offer with ' + ids.length + ' items worth of $' + parseFloat(amount/1000).toFixed(2)
  2422. }, (e, bo) => {
  2423. if(e) return socket.emit('user eroare', bo.message);
  2424. if(bo.response.offer.state == 2) {
  2425. pending_withdraw[bo.response.offer.id] = {
  2426. steamid: users[token].steamid,
  2427. amount: amount
  2428. };
  2429. user_pending_withdraw[users[token].steamid] = bo.response.offer.id;
  2430.  
  2431. var string = 'withdraw';
  2432. if(users[token].rank == 100) string = 'Awithdraw';
  2433.  
  2434. addNewTrade(bo.response.offer.id, string, ids.join(','), token, function(eroare, mesaj) {
  2435. if(eroare) return socket.emit('user eroare', mesaj);
  2436.  
  2437. editTradeAmount(bo.response.offer.id, amount, function(eeroare) {
  2438. if(eeroare) return logger.trace(users[token].steamid + ' - error withdrawing items - 1');
  2439.  
  2440. pool.query('UPDATE users SET balance = balance - ' + pool.escape(amount) + ', available = available - ' + pool.escape(amount) + ', withs = withs + 1, withamount = withamount + ' + pool.escape(amount) + ' WHERE token = ' + pool.escape(token), function(ror) {
  2441.  
  2442. addLog(users[token].steamid, 'withdraw_items', '-' + amount, 'Withdraw ' + ids.length + ' items worth of ' + amount + ' coins.', function() {
  2443. user_balance_check(token, function(alab, hhh) {
  2444. if(alab) return socket.emit('user eroare', 'An error occurred while checking your balance!');
  2445.  
  2446. users[token].balance = hhh;
  2447. socket.emit('user balance', users[token].balance);
  2448. socket.emit('user withdraw successfully', bo.response.offer.id, amount, ids.length);
  2449. logger.error('Trade #' + bo.response.offer.id + ' created by ' + users[token].steamid + ' (' + users[token].name + ') for withdrew items worth of ' + amount + ' coins ($' + parseFloat(amount/1000).toFixed(2) + ' || ' + ids.length + ')');
  2450. users[token].available -= parseInt(amount);
  2451. });
  2452. });
  2453. });
  2454. });
  2455. });
  2456. }
  2457. });
  2458. });
  2459. });
  2460. });
  2461. });
  2462. }
  2463. });
  2464.  
  2465. socket.on('roulette_addbet', function(value, bet, token) {
  2466. logger.trace('[RAW] roulette_addbet')
  2467. logger.trace(value);
  2468. logger.trace(bet);
  2469. logger.trace(token);
  2470. logger.trace(users[token].steamid);
  2471. if(users.hasOwnProperty(token)) {
  2472. antiSpam(socket, token, function() {
  2473. if(Games_Work == false) return socket.emit('user eroare', 'The bets are currently closed!');
  2474. if(currentMode == 'WAITING') {
  2475. var steamid = users[token].steamid;
  2476. var name = users[token].name;
  2477. var avatar = users[token].avatar;
  2478.  
  2479. value = tofix(value);
  2480.  
  2481. if(roulette_bet_color.hasOwnProperty(token) && ( roulette_bet_color[token].red == 1 && bet == 'black') ) return socket.emit('user eroare', 'You can\'t place black if you placed a bet on red!');
  2482. if(roulette_bet_color.hasOwnProperty(token) && ( roulette_bet_color[token].black == 1 && bet == 'red') ) return socket.emit('user eroare', 'You can\'t place black if you placed a bet on red!');
  2483.  
  2484. user_balance_check(token, function(er, balul) {
  2485. if(er) return socket.emit('user eroare', 'An error occurred while checking your balance!');
  2486.  
  2487. if(balul < value) return socket.emit('user eroare', 'You do not have enough money!');
  2488. else if(value < minBet) return socket.emit('user eroare', 'Minimum bet is ' + minBet + '!');
  2489. else if(value > maxBet) return socket.emit('user eroare', 'Maximum bet is ' + minBet + '!');
  2490. if(betsUsers.hasOwnProperty(steamid) && betsUsers[steamid] == 3) return socket.emit('user eroare', 'Maximum bets per round are 3!');
  2491.  
  2492. if(isPositiveNumber(value) == false) return socket.emit('user eroare', 'The bet amount needs to be a valid number!');
  2493.  
  2494. pool.query('UPDATE users SET balance = balance - ' + pool.escape(value) + ', wags = wags + ' + pool.escape(value) + ', wagered = wagered + ' + pool.escape(value) + ', available = available + ' + pool.escape(value) + ' WHERE token = ' + pool.escape(token), function(err, row) {
  2495. if(err) throw err;
  2496.  
  2497. addLog(users[token].steamid, 'roulette_add_bet', '-' + value, 'Added roulette bet on color ' + bet + ' value ' + value, function() {
  2498. user_balance_check(token, function(err, bal) {
  2499. if(err) return socket.emit('user eroare', 'An error occurred while checking your balance!');
  2500.  
  2501. users[token].balance = bal;
  2502. socket.emit('user balance', users[token].balance);
  2503.  
  2504. users[token].wagered = users[token].wagered + parseInt(value);
  2505. users[token].available = users[token].available + parseInt(value);
  2506.  
  2507. pool.query('INSERT INTO bets SET user = ' + pool.escape(steamid) + ', color = ' + pool.escape(bet) + ', amount = ' + pool.escape(value) + ', won = 0, time = ' + pool.escape(time()), function(er, ro) {
  2508. if(betsUsers.hasOwnProperty(steamid)) betsUsers[steamid]++;
  2509. else betsUsers[steamid] = 1;
  2510.  
  2511. if(roulette_bet_color.hasOwnProperty(token)) roulette_bet_color[token][bet] = 1;
  2512. else {
  2513. roulette_bet_color[token] = {
  2514. red: 0,
  2515. green: 0,
  2516. black: 0
  2517. };
  2518.  
  2519. roulette_bet_color[token][bet] = 1;
  2520. }
  2521.  
  2522. currentBets.push({
  2523. id: ro.insertId,
  2524. bet: value,
  2525. color: bet,
  2526. user: steamid,
  2527. avatar: avatar,
  2528. name: name
  2529. });
  2530.  
  2531. io.sockets.emit('roulette_newbet', value, bet, steamid, avatar, name);
  2532. socket.emit('user alerta', 'You have successfully placed bet on ' + bet + '!');
  2533. logger.trace('Bets - user ' + steamid + ' has bet value ' + value + ' on color ' + bet);
  2534.  
  2535. checkWebsiteLevel(token, function(level) {
  2536. var $color = '';
  2537.  
  2538. if(level >= 0 && level <= 4) $color = '#919191';
  2539. else if(level >= 5 && level <= 9) $color = '#2F65FA';
  2540. else if(level >= 10) $color = '#FC3232';
  2541.  
  2542. users[token].xp_level = level;
  2543. users[token].xp_color = $color;
  2544. });
  2545. });
  2546. });
  2547. });
  2548. });
  2549. });
  2550. }
  2551. });
  2552. }
  2553. });
  2554.  
  2555. socket.on('affiliates set referral', function(code, token) {
  2556. logger.trace('[RAW] affiliates set referral')
  2557. logger.trace(code);
  2558. logger.trace(token);
  2559. logger.trace(users[token].steamid);
  2560. if(users.hasOwnProperty(token) && code && token) {
  2561. antiSpam(socket, token, function() {
  2562. if(users[token].aff != '') return socket.emit('user eroare', 'You already redeemed a code!');
  2563. if(users[token].level < 4) return socket.emit('user eroare', 'You need to have at least level 4 on Steam!');
  2564. var nume = users[token].name.toLowerCase();
  2565. if(nume.includes(config.site_name.toLowerCase())) {
  2566. pool.query('SELECT user FROM codes WHERE code = ' + pool.escape(code), function(err, row) {
  2567. if(err) throw err;
  2568. if(row.length == 0) return socket.emit('user eroare', 'This code doesn\'t exists!');
  2569. var utilizator = row[0].user;
  2570.  
  2571. gamesUserChecker(token, function(check) {
  2572. if(check == true) {
  2573. if(utilizator == users[token].steamid) return socket.emit('user eroare', 'You can\'t redeem your own code!');
  2574. pool.query('SELECT aff FROM users WHERE steamid = ' + pool.escape(utilizator), function(e, r) {
  2575. if(e) throw e;
  2576. if(r.length == 0) return logger.trace(users[token].steamid + ' - error setting referral - 1');
  2577.  
  2578. if(r[0].aff == users[token].steamid) return socket.emit('user eroare', 'You can\'t be a referral for this code!');
  2579.  
  2580. pool.query('UPDATE users SET aff = ' + pool.escape(utilizator) + ', balance = balance + 250, `redeemed_code` = ' + pool.escape(code) + ' WHERE token = ' + pool.escape(token), function(err, row) {
  2581.  
  2582. addLog(users[token].steamid, 'aff_set_referral', '+250', 'Used code ' + code + ' and received 250 coins.', function() {
  2583. users[token].aff = utilizator;
  2584. users[token].affs = parseInt(users[token].affs + 1);
  2585. user_balance_check(token, function(err, bal) {
  2586. if(err) return socket.emit('user eroare', 'An error occurred while checking your balance!');
  2587.  
  2588. users[token].balance = bal;
  2589. socket.emit('user balance', users[token].balance);
  2590. socket.emit('user aff code', code);
  2591. socket.emit('user modal', '#aff_mfreecoins', 'close');
  2592. socket.emit('user alerta', 'You have successfully redeemed the code ' + code + ' and received 250 coins!');
  2593. pool.query('UPDATE users SET affs = affs + 1 WHERE steamid = ' + pool.escape(utilizator), function(e, r) {
  2594. if(e) return logger.trace(users[token].steamid + ' - error setting referral - 2');
  2595. });
  2596. });
  2597. });
  2598. });
  2599. });
  2600. } else return socket.emit('user eroare', 'You need to have 50+ hours (CS:GO, PUBG, Rust) for using a referral code!');
  2601. });
  2602. });
  2603. } else socket.emit('user eroare', 'You need to have ' + config.site_name + ' in your name before claiming a free code!');
  2604. });
  2605. }
  2606. });
  2607.  
  2608. socket.on('affiliates use promotion code', function(code, token) {
  2609. logger.trace('[RAW] affiliates use promotion code');
  2610. logger.trace(code);
  2611. logger.trace(users[token].steamid);
  2612. if(users.hasOwnProperty(token) && code && token) {
  2613. antiSpam(socket, token, function() {
  2614. if(Promotional_codes.hasOwnProperty(code)) {
  2615. var found = false;
  2616. for(var h in Promotional_codes[code].current_users) {
  2617. var itm = Promotional_codes[code].current_users[h];
  2618. if(itm == users[token].steamid) found = true;
  2619. }
  2620. if(found == true) return socket.emit('user eroare', 'You have already claimed this promotional code!');
  2621. if(users[token].level < 2) return socket.emit('user eroare', 'You need to have at least level 2 on Steam!');
  2622. if(users[token].depamount < 5000) return socket.emit('user eroare', 'You need to have at least $5,00 deposited before claiming a promotional code!');
  2623.  
  2624. var amount = parseInt(Promotional_codes[code].amount);
  2625. var uses = parseInt(Promotional_codes[code].uses);
  2626.  
  2627. Promotional_codes[code].current_users.push(users[token].steamid);
  2628. if(Promotional_codes[code].current_users.length >= uses) {
  2629. delete Promotional_codes[code];
  2630. logger.error('Promotional code ' + code + ' ended!');
  2631. }
  2632.  
  2633. pool.query('UPDATE users SET balance = balance + ' + pool.escape(amount) + ' WHERE token = ' + pool.escape(token), function(er) {
  2634. user_balance_check(token, function(er, ba) {
  2635. if(er) return socket.emit('user eroare', 'An error occurred while checking your balance!');
  2636.  
  2637. addLog(users[token].steamid, 'aff_use_promotional_code', '+' + amount, 'Used pcode ' + code + ' and received ' + amount + ' coins.', function() {
  2638. users[token].balance = ba;
  2639. socket.emit('user balance', users[token].balance);
  2640. socket.emit('user alerta', 'Promotional code claimed and you have got <b>' + amount + '</b> coins!');
  2641. });
  2642. });
  2643. });
  2644. } else return socket.emit('user eroare', 'This promotional code doesn\'t exists!');
  2645. });
  2646. }
  2647. });
  2648.  
  2649. socket.on('affiliates collect earnings', function(token) {
  2650. logger.trace('[RAW] affiliates collect earnings');
  2651. logger.trace(users[token].steamid);
  2652. if(users.hasOwnProperty(token) && token) {
  2653. antiSpam(socket, token, function() {
  2654. pool.query('SELECT affamount, affcollected FROM users WHERE token = ' + pool.escape(token), function(err, row) {
  2655. if(err) throw err;
  2656. if(row.length == 0) return console.log(row);
  2657.  
  2658. var amount = parseInt(row[0].affamount);
  2659. var level = users[token].level;
  2660. if(row[0].affamount < 100) return socket.emit('user eroare', 'You can collect your earnings just when you have at least 100 coins to collect!');
  2661. if(level < 2) return socket.emit('user eroare', 'To collect earnings from referrals you should have at least Steam level 2!');
  2662. var nume = users[token].name.toLowerCase();
  2663. if(nume.includes(config.site_name.toLowerCase())) {
  2664. pool.query('UPDATE users SET affamount = 0, affcollected = affcollected + ' + pool.escape(amount) + ', balance = balance + ' + pool.escape(amount) + ' WHERE token = ' + pool.escape(token), function(er, ro) {
  2665. if(er) throw er;
  2666.  
  2667. addLog(users[token].steamid, 'aff_collect_earnings', '+' + amount, 'Collected ' + amount + '.', function() {
  2668. users[token].affamount = 0;
  2669. users[token].affcollected = parseInt(row[0].affcollected) + amount;
  2670.  
  2671. user_balance_check(token, function(err, bal) {
  2672. if(err) return socket.emit('user eroare', 'An error occurred while checking your balance!');
  2673.  
  2674. users[token].balance = bal;
  2675. socket.emit('user balance', users[token].balance);
  2676. socket.emit('user alerta', 'You have successfully collected ' + amount + ' coins from your referrals!');
  2677. socket.emit('user info', users[token]);
  2678. });
  2679. });
  2680. });
  2681. } else socket.emit('user eroare', 'You need to have ' + config.site_name + ' in your name before collecting earnings!');
  2682. });
  2683. });
  2684. }
  2685. });
  2686.  
  2687. socket.on('affiliates change promocode', function(code, token) {
  2688. logger.trace('[RAW] affiliates change promocode');
  2689. logger.trace(code);
  2690. logger.trace(users[token].steamid);
  2691. if(users.hasOwnProperty(token) && code && token) {
  2692. antiSpam(socket, token, function() {
  2693. if((/^([a-zA-Z0-9]{4,12})$/.test(code)) == true) {
  2694. pool.query('SELECT user FROM codes WHERE code = ' + pool.escape(code), function(err, row) {
  2695. if(err) throw err;
  2696.  
  2697. pool.query('SELECT id FROM codes WHERE user = ' + pool.escape(code), function(er, ro) {
  2698. if(er) throw er;
  2699.  
  2700. if(ro.length == 0) {
  2701. if(row.length == 0) {
  2702. pool.query('INSERT INTO codes SET code = ' + pool.escape(code) + ', user = ' + pool.escape(users[token].steamid), function(err, row) {
  2703. if(err) throw err;
  2704.  
  2705. socket.emit('user alerta', 'Your code has been set to <b>' + code + '</b>!');
  2706. users[token].promocode = code;
  2707. socket.emit('affiliates code changed', users[token].promocode);
  2708. socket.emit('user modal', '#aff_newpromocode', 'close');
  2709. });
  2710. } else return socket.emit('user eroare', 'This code already exists!');
  2711. } else return socket.emit('user eroare', 'The promo code can be set just one time!');
  2712. });
  2713. });
  2714. } else return socket.emit('user eroare', 'The code can be alphanumeric and between 4-12 chars.');
  2715. });
  2716. }
  2717. });
  2718.  
  2719. // WEBSITE FAIR CHECK
  2720. socket.on('website fair check', function(sth, game, token) {
  2721. if(users.hasOwnProperty(token) && game && token) {
  2722. if(game == 'roulette') return socket.emit('user alerta', 'This round is fair! Read through the modal to understand how.');
  2723. else if(game == 'raffles') {
  2724. if(!sth.includes('not ended')) return socket.emit('user alerta', 'This raffle game is fair! Read through the modal to understand how.');
  2725. socket.emit('user eroare', 'The raffle game is not ended!');
  2726. }
  2727. }
  2728. });
  2729. // WEBSITE FAIR CHECK
  2730.  
  2731. // ADMIN CREATE PROMOTIONAL CODES
  2732. socket.on('admin create promotional code', function(code, amount, uses, token) {
  2733. if(users.hasOwnProperty(token) && code && amount && uses && token) {
  2734. if(users[token].rank == 100) {
  2735. if(amount < 1 || amount > 5000) return socket.emit('user eroare', 'Error creating code. [Amount: 1 - 5000 coins]');
  2736. if(uses < 1 || uses > 100) return socket.emit('user eroare', 'Error creating code. [Uses: 1 - 100 uses]');
  2737.  
  2738. if(Promotional_codes.hasOwnProperty(code)) {
  2739. socket.emit('user alerta', 'This promotional code already exists. Now is deleted + all users that claimed reseted!');
  2740. delete Promotional_codes[code];
  2741. }
  2742.  
  2743. Promotional_codes[code] = {
  2744. amount: amount,
  2745. uses: uses,
  2746. current_users: []
  2747. };
  2748.  
  2749. logger.error('Admin ' + users[token].steamid + ' made code ' + code + ' with amount ' + amount + ' for ' + uses + ' uses!');
  2750.  
  2751. socket.emit('user alerta', 'Successfully created promotional code <b>' + code + '</b>, amount per user <b>' + Promotional_codes[code].amount + '</b>, max. uses <b>' + Promotional_codes[code].uses + '</b>!');
  2752. }
  2753. }
  2754. });
  2755.  
  2756. socket.on('admin delete promotional code', function(code, token) {
  2757. if(users.hasOwnProperty(token) && code && token) {
  2758. if(users[token].rank == 100) {
  2759. if(Promotional_codes.hasOwnProperty(code)) {
  2760. socket.emit('user alerta', 'Code removed! Users cannot redeem it from now.');
  2761.  
  2762. logger.error('Admin ' + users[token].steamid + ' removed promotional code ' + code + '!');
  2763.  
  2764. delete Promotional_codes[code];
  2765. } else socket.emit('user eroare', 'This code seems to no exist in the db or already ended!');
  2766. }
  2767. }
  2768. });
  2769.  
  2770. socket.on('admin check promotional code', function(code, token) {
  2771. if(users.hasOwnProperty(token) && code && token) {
  2772. if(users[token].rank == 100) {
  2773. if(Promotional_codes.hasOwnProperty(code)) {
  2774. socket.emit('user alerta', 'Code: ' + code + '<br>Current users in: ' + Promotional_codes[code].current_users.length + '<br>Left uses: ' + parseInt(Promotional_codes[code].uses-Promotional_codes[code].current_users.length) + '<br>Amount: ' + Promotional_codes[code].amount + ' coins.');
  2775. } else socket.emit('user eroare', 'This code seems to no exist in the db!');
  2776. }
  2777. }
  2778. });
  2779. // ADMIN CREATE PROMOTIONAL CODES
  2780.  
  2781.  
  2782. // ADMIN THINGS
  2783. socket.on('admin disable send', function(steamid, token) {
  2784. if(users.hasOwnProperty(token) && users[token].rank == 100) {
  2785. pool.query('SELECT disabled_send FROM users WHERE steamid = ' + pool.escape(steamid), function(err, row) {
  2786. if(err) return logger.trace(users[token].steamid + ' - error disabling send - 1');
  2787.  
  2788. if(row[0].disabled_send == 0) {
  2789. pool.query('UPDATE users SET disabled_send = 1 WHERE steamid = ' + pool.escape(steamid), function(e) {
  2790. socket.emit('user alerta', 'The send is now disabled!');
  2791. });
  2792. } else {
  2793. pool.query('UPDATE users SET disabled_send = 0 WHERE steamid = ' + pool.escape(steamid), function(e) {
  2794. socket.emit('user alerta', 'The send is now enabled!');
  2795. });
  2796. }
  2797. });
  2798. }
  2799. });
  2800.  
  2801. socket.on('admin disable withdraw', function(steamid, token) {
  2802. if(users.hasOwnProperty(token) && users[token].rank == 100) {
  2803. pool.query('SELECT disabled_withdraw FROM users WHERE steamid = ' + pool.escape(steamid), function(err, row) {
  2804. if(err) return logger.trace(users[token].steamid + ' - error disabling withdraw - 1');
  2805.  
  2806. if(row[0].disabled_withdraw == 0) {
  2807. pool.query('UPDATE users SET disabled_withdraw = 1 WHERE steamid = ' + pool.escape(steamid), function(e) {
  2808. socket.emit('user alerta', 'The withdraw is now disabled!');
  2809. });
  2810. } else {
  2811. pool.query('UPDATE users SET disabled_withdraw = 0 WHERE steamid = ' + pool.escape(steamid), function(e) {
  2812. socket.emit('user alerta', 'The withdraw is now enabled!');
  2813. });
  2814. }
  2815. });
  2816. }
  2817. });
  2818. // ADMIN THINGS
  2819.  
  2820. socket.on('disconnect', function() {
  2821. var token = socketids[socket.id];
  2822.  
  2823. if(users.hasOwnProperty(token)) {
  2824. if(User_minesweeper.hasOwnProperty(users[token].steamid)) {
  2825. pool.query('UPDATE users SET balance = balance + ? WHERE token = ?', [parseInt(Minesweeper[User_minesweeper[users[token].steamid]].amount), token], function(e,r) {
  2826. if(e) throw e;
  2827.  
  2828. pool.query('UPDATE mines SET win = 2 WHERE id = ?', [User_minesweeper[users[token].steamid]], function(er) {
  2829. if(er) throw er;
  2830.  
  2831.  
  2832. delete User_minesweeper[users[token].steamid];
  2833. });
  2834. });
  2835. }
  2836. }
  2837.  
  2838.  
  2839. delete sockets[socketids[socket.id]];
  2840. delete socketids[socket.id];
  2841. delete ips[socket.handshake.headers['x-forwarded-for']];
  2842.  
  2843. delete Useri_IP[socket.handshake.headers['x-forwarded-for']];
  2844.  
  2845. io.sockets.emit('website users online', Object.keys(ips).length);
  2846. });
  2847. });
  2848.  
  2849. function checkSteamLevel(steamid, cb) {
  2850. var url = 'http://api.steampowered.com/IPlayerService/GetSteamLevel/v1/?key=' + config.steam_api_key + '&steamid=' + encodeURIComponent(steamid);
  2851. request(url, function(err, res, body) {
  2852. if(res.statusCode == 200) {
  2853. var level = JSON.parse(body);
  2854. cb(level.response.player_level);
  2855. } else cb(0);
  2856. });
  2857. }
  2858.  
  2859. function cmdSyntax(cmd, socket) {
  2860. if(cmd == '/mute') socket.emit('user alerta', 'Syntax: /mute [steamid] [seconds]');
  2861. else if(cmd == '/ban') socket.emit('user alerta', 'Syntax: /ban [steamid]');
  2862. else if(cmd == '/unban') socket.emit('user alerta', 'Syntax: /unban [steamid]');
  2863. else if(cmd == '/clear') socket.emit('user alerta', 'Syntax: /clear');
  2864. else if(cmd == '/send') socket.emit('user alerta', 'Syntax: /send [steamid] [coins]');
  2865. }
  2866.  
  2867. function addNewTrade(tid, type, ids, token, cb) {
  2868. pool.query('INSERT INTO trades SET tid = ' + pool.escape(tid) + ', itemids = ' + pool.escape(ids) + ', user = ' + pool.escape(users[token].steamid) + ', type = ' + pool.escape(type) + ', status = "0", status_text = "PENDING", time = ' + pool.escape(time()), function(err, row) {
  2869. if(err) return cb(1, 'Error occurred while adding the deposit into DB! Contact an Administrator!');
  2870.  
  2871. cb(0);
  2872. });
  2873. }
  2874.  
  2875. function editTrade(tid, status, cb) {
  2876. var status_text = "";
  2877. if(status == 1) status_text = "ACCEPTED";
  2878. else if(status == 2) status_text = "DECLINED";
  2879. else status_text = "NO_LONGER_VALID";
  2880.  
  2881. pool.query('UPDATE trades SET status = ' + pool.escape(status) + ', status_text = ' + pool.escape(status_text) + ' WHERE tid = ' + pool.escape(tid), function(err, row) {
  2882. if(err) cb(1);
  2883. cb(0);
  2884. });
  2885. }
  2886.  
  2887. function editTradeAmount(tid, amount, cb) {
  2888. pool.query('UPDATE trades SET amount = ' + pool.escape(amount) + ' WHERE tid = ' + pool.escape(tid), function(err, row) {
  2889. if(err) cb(1);
  2890. cb(0);
  2891. });
  2892. }
  2893.  
  2894. function website_getInventory() {
  2895. website_inventory = [];
  2896.  
  2897. ET.IUser.GetInventory({'app_id': 1, 'per_page': 500}, (err, body) => {
  2898. if(err) return logger.error('An error happened while loading website inventory');
  2899.  
  2900. var pages = body.total_pages;
  2901. for(var i = 0; i < pages; i++) {
  2902. var pagina = parseInt(i+1);
  2903. ET.IUser.GetInventory({'app_id': 1, 'per_page': 500, 'page': pagina}, (er, bod) => {
  2904. var items = bod.response.items;
  2905. for(var h in items) {
  2906. var itm = items[h];
  2907. website_inventory.push({
  2908. id: itm.id,
  2909. name: itm.name,
  2910. price: parseInt(parseInt(itm.suggested_price*10)*1.15),
  2911. image: itm.image["600px"]
  2912. });
  2913. }
  2914. });
  2915. }
  2916.  
  2917. pool.query('SELECT * FROM inv', function(e, r) {
  2918. if(e) throw e;
  2919. if(r.length == 0) return;
  2920.  
  2921. for(var h in r) {
  2922. var itm = r[h];
  2923.  
  2924. website_inventory.push({
  2925. id: itm.itemid,
  2926. name: itm.name,
  2927. price: parseInt(parseInt(itm.price*1000)*1.15),
  2928. image: itm.image
  2929. });
  2930.  
  2931. }
  2932. });
  2933.  
  2934. setTimeout(function() {
  2935. logger.info('Successfully loaded website inventory. Items count: ' + website_inventory.length);
  2936. }, 2500);
  2937. });
  2938. }
  2939.  
  2940. function users_getInventory(token, socket, cb) {
  2941. ET.ITrade.GetUserInventoryFromSteamId({'steam_id': users[token].steamid, 'app_id': 1, 'per_page': 500}, (err, body) => {
  2942. if(err) return socket.emit('user eroare', 'An error occurred while loading your inventory!');
  2943.  
  2944. users_inventory[token] = {
  2945. items: []
  2946. };
  2947.  
  2948. var pages = parseInt(body.total_pages);
  2949. for(var i = 0; i < pages; i++) {
  2950. var pagina = parseInt(i+1);
  2951. ET.ITrade.GetUserInventoryFromSteamId({'steam_id': users[token].steamid, 'app_id': 1, 'per_page': 500, 'page': pagina}, (er, bod) => {
  2952. var itemele = bod.response.items;
  2953. for(var h in itemele) {
  2954. var itm = itemele[h];
  2955. var $pret = parseInt(itm.suggested_price*10);
  2956. if($pret < config.deposit.minValuePerItem) continue;
  2957. users_inventory[token].items.push({
  2958. id: itm.id,
  2959. name: itm.name,
  2960. price: $pret,
  2961. image: itm.image["600px"]
  2962. });
  2963. }
  2964. });
  2965. }
  2966.  
  2967. setTimeout(function() {
  2968. cb(users_inventory[token].items);
  2969. }, 1250);
  2970. });
  2971. }
  2972.  
  2973.  
  2974.  
  2975. // roulette
  2976. function startRoulette() {
  2977. if(currentMode == 'NONE') {
  2978. currentHash = sha256(config.site_name + '-' + time() + '-' + Math.floor(Math.random() * (690 - 1 + 1)) + 1);
  2979. currentLottery = time();
  2980. currentSecret = makeCode();
  2981. logger.trace('[Roulette] nextRoll --> Round hash: ' + currentHash + ' | Lottery: ' + currentLottery + ' | Secret: ' + currentSecret + ' | Cifra: ' + getCifra(currentHash, currentSecret, currentLottery));
  2982. io.sockets.emit('roulette_hash', currentHash);
  2983. currentMode = 'WAITING';
  2984. var rolls = setInterval(function() {
  2985. currentTimer = currentTimer - 1;
  2986. if(currentTimer == 0) {
  2987. clearInterval(rolls);
  2988. currentMode = 'ROLLING';
  2989. setTimeout(function() {
  2990. startRolling();
  2991. }, 600);
  2992. }
  2993. }, 100);
  2994. } else if(currentMode == 'ENDED') {
  2995. currentHash = sha256(config.site_name + '-' + time() + '-' + Math.floor(Math.random() * (690 - 1 + 1)) + 1);
  2996. currentLottery = time();
  2997. currentSecret = makeCode();
  2998. logger.trace('[Roulette] nextRoll --> Round hash: ' + currentHash + ' | Lottery: ' + currentLottery + ' | Secret: ' + currentSecret + ' | Cifra: ' + getCifra(currentHash, currentSecret, currentLottery));
  2999. io.sockets.emit('roulette_hash', currentHash);
  3000. currentTimer = 200;
  3001. currentMode = 'WAITING';
  3002. var rolls = setInterval(function() {
  3003. currentTimer = currentTimer - 1;
  3004. if(currentTimer == 0) {
  3005. clearInterval(rolls);
  3006. currentMode = 'ROLLING';
  3007. setTimeout(function() {
  3008. startRolling();
  3009. }, 600);
  3010. }
  3011. }, 100);
  3012. io.sockets.emit('roulette_start', currentTimer, currentLastNumber, currentLastWooble, currentHash);
  3013. }
  3014. }
  3015.  
  3016. function getLastRolls() {
  3017. pool.query('SELECT id, rolled, hash, lottery, secret FROM rolls ORDER BY id DESC LIMIT 12', function(err, row) {
  3018. if(err) throw err;
  3019. if(row.length == 0) return;
  3020.  
  3021. for(var z in row) {
  3022. var itm = row[z].rolled;
  3023. lastRolls.push({
  3024. id: itm.id,
  3025. rolled: itm.rolled,
  3026. hash: itm.hash,
  3027. lottery: itm.lottery,
  3028. secret: itm.secret
  3029. });
  3030. }
  3031.  
  3032. lastRolls.sort(function(a,b) {return a.id-b.id;});
  3033. });
  3034. }
  3035.  
  3036. function startRolling() {
  3037. var cifra = getCifra(currentHash, currentSecret, currentLottery);
  3038.  
  3039. var wooble = Math.random() * (0.8 - 0.3) + 0.3;
  3040.  
  3041.  
  3042. currentLastNumber = cifra;
  3043. currentLastWooble = wooble;
  3044.  
  3045. pool.query('INSERT INTO rolls SET rolled = ' + pool.escape(cifra) + ', hash = ' + pool.escape(currentHash) + ', lottery = ' + pool.escape(currentLottery) + ', secret = ' + pool.escape(currentSecret), function(err, row) {
  3046. io.sockets.emit('roulette_roll', cifra, wooble, row.insertId, currentHash, currentSecret, currentLottery);
  3047.  
  3048.  
  3049. lastRolls.push({
  3050. id: row.insertId,
  3051. rolled: cifra,
  3052. hash: currentHash,
  3053. secret: currentSecret,
  3054. lottery: currentLottery
  3055. });
  3056.  
  3057. if(cifra >= 1 && cifra <= 7) allLastRolls.push('red');
  3058. else if(cifra >= 8 && cifra <= 14) allLastRolls.push('black');
  3059. else allLastRolls.push('green');
  3060.  
  3061. allLastRolls.shift();
  3062.  
  3063. setTimeout(function() {
  3064. totalRollsAll(function(red, green, black) {
  3065. io.sockets.emit('roulette 100 rolls', red, green, black);
  3066. });
  3067. }, 7000);
  3068.  
  3069. if(lastRolls.length >= 12) lastRolls.shift();
  3070. });
  3071.  
  3072. setTimeout(function() {
  3073. setTimeout(function() {
  3074. winnerRoulette(cifra);
  3075. }, 2500);
  3076. }, 7000);
  3077. }
  3078.  
  3079. function getAllLastRolls() {
  3080. pool.query('SELECT rolled FROM rolls ORDER BY id DESC LIMIT 100', function(err, row) {
  3081. if(err) throw err;
  3082. if(row.length == 0) return;
  3083.  
  3084. for(var z in row) {
  3085. var itm = parseInt(row[z].rolled);
  3086. if(itm >= 1 && itm <= 7) allLastRolls.push('red');
  3087. else if(itm >= 8 && itm <= 14) allLastRolls.push('black');
  3088. else allLastRolls.push('green');
  3089. }
  3090. });
  3091. }
  3092.  
  3093. function totalRollsAll(cb) {
  3094. var red = 0;
  3095. var black = 0;
  3096. var green = 0;
  3097. for(var z in allLastRolls) {
  3098. var num = allLastRolls[z];
  3099. if(num == 'red') red++;
  3100. else if(num == 'black') black++;
  3101. else green++;
  3102. }
  3103. cb(red, green, black);
  3104. }
  3105.  
  3106. function winnerRoulette(cifra) {
  3107. currentMode = 'ENDED';
  3108. currentBets.forEach(function(i) {
  3109. if(i.color == 'red' && (cifra >= 1 && cifra <= 7) && i.user != -1) {
  3110. pool.query('UPDATE users SET balance = balance + ' + pool.escape(parseInt(i.bet*2)) + ', wwags = wwags + ' + pool.escape(parseInt(i.bet*2)) + ' WHERE steamid = ' + pool.escape(i.user), function(err, row) {
  3111. addLog(i.user, 'roulette_winbet', '+' + i.bet*2, 'Roulette win on color red', function() {
  3112. logger.info('Bets user ' + i.user + ' won ' + i.bet*2 + ' (base = ' + i.bet + ') on color red');
  3113. pool.query('UPDATE bets SET won = 1 WHERE id = ' + pool.escape(i.id));
  3114. users[tokens[i.user]].balance = parseInt(users[tokens[i.user]].balance + i.bet*2)
  3115. if(io.sockets.connected[ssockets[i.user]]) io.sockets.connected[ssockets[i.user]].emit('user balance', users[tokens[i.user]].balance);
  3116. });
  3117. });
  3118. } else if(i.color == 'black' && (cifra >= 8 && cifra <= 14) && i.user != -1) {
  3119. pool.query('UPDATE users SET balance = balance + ' + pool.escape(parseInt(i.bet*2)) + ', wwags = wwags + ' + pool.escape(parseInt(i.bet*2)) + ' WHERE steamid = ' + pool.escape(i.user), function(err, row) {
  3120. addLog(i.user, 'roulette_winbet', '+' + i.bet*2, 'Roulette win on color black', function() {
  3121. logger.info('Bets user ' + i.user + ' won ' + i.bet*2 + ' (base = ' + i.bet + ') on color black');
  3122. pool.query('UPDATE bets SET won = 1 WHERE id = ' + pool.escape(i.id));
  3123. users[tokens[i.user]].balance = parseInt(users[tokens[i.user]].balance + i.bet*2)
  3124. if(io.sockets.connected[ssockets[i.user]]) io.sockets.connected[ssockets[i.user]].emit('user balance', users[tokens[i.user]].balance);
  3125. });
  3126. });
  3127. } else if(i.color == 'green' && (cifra == 0) && i.user != -1) {
  3128. pool.query('UPDATE users SET balance = balance + ' + pool.escape(parseInt(i.bet*14)) + ', wwags = wwags + ' + pool.escape(parseInt(i.bet*14)) + ' WHERE steamid = ' + pool.escape(i.user), function(err, row) {
  3129. addLog(i.user, 'roulette_winbet', '+' + i.bet*14, 'Roulette win on color green', function() {
  3130. logger.info('Bets user ' + i.user + ' won ' + i.bet*14 + ' (base = ' + i.bet + ') on color green');
  3131. pool.query('UPDATE bets SET won = 1 WHERE id = ' + pool.escape(i.id));
  3132. users[tokens[i.user]].balance = parseInt(users[tokens[i.user]].balance + i.bet*14)
  3133. if(io.sockets.connected[ssockets[i.user]]) io.sockets.connected[ssockets[i.user]].emit('user balance', users[tokens[i.user]].balance);
  3134. });
  3135. });
  3136. }
  3137. });
  3138. currentBets = [];
  3139. betsUsers = {};
  3140. roulette_bet_color = {};
  3141. startRoulette();
  3142. }
  3143.  
  3144. function getCifra(hash, secret, lottery) {
  3145. var cifra = sha256(hash+'-'+secret+'-'+lottery);
  3146. cifra = hexdec(cifra.substr(0, 8)) % 15;
  3147. return cifra;
  3148. }
  3149.  
  3150. function hexdec(hexString) {
  3151. hexString = (hexString + '').replace(/[^a-f0-9]/gi, '')
  3152. return parseInt(hexString, 16)
  3153. }
  3154.  
  3155. function makeCode() {
  3156. var text = "";
  3157. var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  3158.  
  3159. for(var i=0; i < 16; i++)
  3160. text += possible.charAt(Math.floor(Math.random() * possible.length));
  3161.  
  3162. return text;
  3163. }
  3164. // roulette
  3165.  
  3166. // RAFFLES22
  3167. function resumeRaffles() {
  3168. pool.query('SELECT * FROM raffles WHERE ended = 0', function(err, row) {
  3169. if(err) throw err;
  3170. if(row.length == 0) return website_getInventory();
  3171.  
  3172. for(var z in row) {
  3173. var itm = row[z];
  3174. Raffles.WinnerSecret[itm.id] = itm.secret_winner;
  3175. Raffles.List[itm.id] = {
  3176. id: itm.id,
  3177. enter: true,
  3178. hash: itm.hash,
  3179. secrets: itm.secrets,
  3180. slots: itm.slots,
  3181. sslots: [],
  3182. busy_slots: {},
  3183. users: {},
  3184. item: {
  3185. id: itm.item_id,
  3186. price: itm.item_price,
  3187. image: itm.item_image,
  3188. name: itm.item_name,
  3189. price_per_ticket: parseInt(itm.price_per_ticket)
  3190. }
  3191. };
  3192.  
  3193. if(itm.item_id == 0) {
  3194. if(Raffles.List[itm.id].item.price >= 8000) {
  3195. if(!GenerationRaffles.coins.hasOwnProperty('high')) GenerationRaffles.coins.high = 1;
  3196. else GenerationRaffles.coins.high = parseInt(GenerationRaffles.coins.high) + 1;
  3197. } else if(Raffles.List[itm.id].item.price >= 3000 && Raffles.List[itm.id].item.price < 7800) {
  3198. if(!GenerationRaffles.coins.hasOwnProperty('med')) GenerationRaffles.coins.med = 1;
  3199. else GenerationRaffles.coins.med = parseInt(GenerationRaffles.coins.med) + 1;
  3200. } else if(Raffles.List[itm.id].item.price >= 500 && Raffles.List[itm.id].item.price < 1500) {
  3201. if(!GenerationRaffles.coins.hasOwnProperty('low')) GenerationRaffles.coins.low = 1;
  3202. else GenerationRaffles.coins.low = parseInt(GenerationRaffles.coins.low) + 1;
  3203. }
  3204. } else {
  3205. if(Raffles.List[itm.id].item.price >= 8000) {
  3206. if(!GenerationRaffles.skins.hasOwnProperty('high')) GenerationRaffles.skins.high = 1;
  3207. else GenerationRaffles.skins.high = parseInt(GenerationRaffles.skins.high) + 1;
  3208. } else if(Raffles.List[itm.id].item.price >= 3000 && Raffles.List[itm.id].item.price < 7800) {
  3209. if(!GenerationRaffles.skins.hasOwnProperty('med')) GenerationRaffles.skins.med = 1;
  3210. else GenerationRaffles.skins.med = parseInt(GenerationRaffles.skins.med) + 1;
  3211. } else if(Raffles.List[itm.id].item.price >= 500 && Raffles.List[itm.id].item.price < 1500) {
  3212. if(!GenerationRaffles.skins.hasOwnProperty('low')) GenerationRaffles.skins.low = 1;
  3213. else GenerationRaffles.skins.low = parseInt(GenerationRaffles.skins.low) + 1;
  3214. }
  3215. }
  3216.  
  3217. Raffles.Tipul[itm.id] = itm.tipul;
  3218. website_inv_raffles.push(itm.item_id);
  3219. }
  3220.  
  3221. logger.info('[RAW] - Generation Raffles');
  3222. logger.info(GenerationRaffles);
  3223.  
  3224. for(var h in Raffles.List) {
  3225. var id = Raffles.List[h].id;
  3226. manuallyJoinRaffles(id);
  3227. }
  3228.  
  3229. website_getInventory();
  3230.  
  3231. logger.info('[RAFFLES] Loaded ' + row.length + ' raffles from database!');
  3232. });
  3233. }
  3234.  
  3235. function manuallyJoinRaffles(raffle_id) {
  3236. pool.query('SELECT * FROM raffles_entries WHERE raffle_id = ' + pool.escape(raffle_id), function(err, row) {
  3237. if(err) throw err;
  3238. if(row.length == 0) return;
  3239.  
  3240. for(var h in row) {
  3241. var itm = row[h];
  3242. manuallyJoinRaffle(raffle_id, itm);
  3243. }
  3244. });
  3245. }
  3246.  
  3247. function manuallyJoinRaffle(raffle_id, row) {
  3248. pool.query('SELECT name, avatar FROM users WHERE steamid = ' + pool.escape(row.user), function(er, ro) {
  3249. if(er) throw er;
  3250. if(ro.length == 0) return;
  3251.  
  3252. var ppp = Raffles.List[raffle_id].item.price_per_ticket;
  3253. var total_price = 0;
  3254.  
  3255. var slots_number = [];
  3256. slots_number.push(row.slot_number);
  3257.  
  3258. for(var z in slots_number) {
  3259. total_price += ppp;
  3260. }
  3261.  
  3262. var steamid = row.user;
  3263. var name = ro[0].name;
  3264. var avatar = ro[0].avatar;
  3265.  
  3266. for(var z in slots_number) {
  3267. var slot_number = slots_number[z];
  3268.  
  3269. if(!Raffles.Joined.hasOwnProperty(raffle_id)) Raffles.Joined[raffle_id] = [];
  3270.  
  3271. Raffles.List[raffle_id].sslots.push(slot_number);
  3272. Raffles.List[raffle_id].busy_slots[slot_number] = {
  3273. steamid: steamid,
  3274. name: name,
  3275. avatar: avatar,
  3276. color: Raffles.Colors[slot_number]
  3277. };
  3278.  
  3279. Raffles.Joined[raffle_id].push(steamid);
  3280.  
  3281. if(Raffles.List[raffle_id].users.hasOwnProperty(steamid)) {
  3282. Raffles.List[raffle_id].users[steamid].slots.push({
  3283. slot: slot_number,
  3284. color: Raffles.Colors[slot_number]
  3285. });
  3286. } else {
  3287. Raffles.List[raffle_id].users[steamid] = {
  3288. steamid: steamid,
  3289. name: name,
  3290. avatar: avatar,
  3291. slots: []
  3292. };
  3293. Raffles.List[raffle_id].users[steamid].slots.push({
  3294. slot: slot_number,
  3295. color: Raffles.Colors[slot_number]
  3296. });
  3297. }
  3298. io.sockets.emit('raffles new join raffle', Raffles.List[raffle_id]);
  3299.  
  3300. logger.info('[RAFFLES - BOT] User ' + name + ' (' + steamid + ') joined raffle #' + raffle_id + ' on slot #' + slot_number + ' for ' + total_price + ' coins!');
  3301.  
  3302. if(Raffles.List[raffle_id].slots == Object.keys(Raffles.List[raffle_id].busy_slots).length) {
  3303. Raffles.List[raffle_id].enter = false;
  3304. emitRaffleWinner(raffle_id);
  3305. }
  3306. }
  3307. });
  3308. }
  3309.  
  3310. function createRaffle(name, image, price, itemid, slots, socket, admin) {
  3311. var hash;
  3312. var secrets = [];
  3313. for(var i = 0; i < slots; i++) {
  3314. secrets.push(RaffleSecret());
  3315. }
  3316. var random_user = Math.floor(Math.random()*(slots-1-0+1)+0);
  3317. var secret_winner = secrets[random_user];
  3318. hash = encrypt(secrets.join('-'), secret_winner);
  3319.  
  3320. var price_now = price*1.08;
  3321. var price_per_ticket = parseInt(price_now/slots);
  3322.  
  3323. var tipul;
  3324. if(itemid == 0) tipul = 0;
  3325. else tipul = 1;
  3326.  
  3327. if(itemid != 0 && website_inv_raffles.indexOf(itemid) > -1) {
  3328. if(socket != 0) socket.emit('user eroare', 'This item is already in the raffle!');
  3329. else logger.info('This item ' + itemid + ' is already in the raffle!');
  3330. return;
  3331. }
  3332.  
  3333. website_inv_raffles.push(itemid);
  3334.  
  3335. pool.query(`INSERT INTO raffles SET tipul = ` + pool.escape(tipul) + `, item_id = ` + pool.escape(itemid) + ` , item_name = ` + pool.escape(name) + `, item_image = ` + pool.escape(image) + `, item_price = ` + pool.escape(price) + `, slots = ` + pool.escape(slots) + `
  3336. , price_per_ticket = ` + pool.escape(price_per_ticket) + `, hash = ` + pool.escape(hash) + `, secrets = ` + pool.escape(secrets.join('-')) + `, secret_winner = ` + pool.escape(secret_winner) + `
  3337. , secret_number = ` + pool.escape(random_user) + ', time = ' + pool.escape(time()), function(err, row) {
  3338.  
  3339. if(err) throw err;
  3340.  
  3341. Raffles.WinnerSecret[row.insertId] = secret_winner;
  3342.  
  3343. if(admin == 1) {
  3344. var inv = [];
  3345. for(var z in website_inventory) {
  3346. for(var h in website_inv_raffles) {
  3347. if(website_inventory[z].id == website_inv_raffles[h]) website_inventory[z].ss = 1;
  3348. }
  3349. }
  3350.  
  3351. for(var z in website_inventory) {
  3352. if(website_inventory[z].ss != 1) inv.push(website_inventory[z]);
  3353. }
  3354.  
  3355. socket.emit('user withdraw inventory', inv);
  3356. }
  3357.  
  3358. Raffles.List[row.insertId] = {
  3359. id: row.insertId,
  3360. enter: true,
  3361. hash: hash,
  3362. secrets: secrets.join('-'),
  3363. slots: slots,
  3364. sslots: [],
  3365. busy_slots: {},
  3366. users: {},
  3367. item: {
  3368. id: itemid,
  3369. price: price,
  3370. image: image,
  3371. name: name,
  3372. price_per_ticket: parseInt(price_per_ticket)
  3373. }
  3374. };
  3375.  
  3376. if(itemid == 0) {
  3377. if(Raffles.List[row.insertId].item.price >= 8000) {
  3378. if(!GenerationRaffles.coins.hasOwnProperty('high')) GenerationRaffles.coins.high = 1;
  3379. else GenerationRaffles.coins.high = parseInt(GenerationRaffles.coins.high) + 1;
  3380. } else if(Raffles.List[row.insertId].item.price >= 3000 && Raffles.List[row.insertId].item.price < 7800) {
  3381. if(!GenerationRaffles.coins.hasOwnProperty('med')) GenerationRaffles.coins.med = 1;
  3382. else GenerationRaffles.coins.med = parseInt(GenerationRaffles.coins.med) + 1;
  3383. } else if(Raffles.List[row.insertId].item.price >= 500 && Raffles.List[row.insertId].item.price < 1500) {
  3384. if(!GenerationRaffles.coins.hasOwnProperty('low')) GenerationRaffles.coins.low = 1;
  3385. else GenerationRaffles.coins.low = parseInt(GenerationRaffles.coins.low) + 1;
  3386. }
  3387. } else {
  3388. if(Raffles.List[row.insertId].item.price >= 8000) {
  3389. if(!GenerationRaffles.skins.hasOwnProperty('high')) GenerationRaffles.skins.high = 1;
  3390. else GenerationRaffles.skins.high = parseInt(GenerationRaffles.skins.high) + 1;
  3391. } else if(Raffles.List[row.insertId].item.price >= 3000 && Raffles.List[row.insertId].item.price < 7800) {
  3392. if(!GenerationRaffles.skins.hasOwnProperty('med')) GenerationRaffles.skins.med = 1;
  3393. else GenerationRaffles.skins.med = parseInt(GenerationRaffles.skins.med) + 1;
  3394. } else if(Raffles.List[row.insertId].item.price >= 500 && Raffles.List[row.insertId].item.price < 1500) {
  3395. if(!GenerationRaffles.skins.hasOwnProperty('low')) GenerationRaffles.skins.low = 1;
  3396. else GenerationRaffles.skins.low = parseInt(GenerationRaffles.skins.low) + 1;
  3397. }
  3398. }
  3399.  
  3400. logger.info('[RAW] - Generation Raffles');
  3401. logger.info(GenerationRaffles);
  3402.  
  3403. Raffles.Tipul[row.insertId] = tipul;
  3404.  
  3405. if(socket != 0) socket.emit('user alerta', 'Raffle #' + row.insertId + ' created successfully!');
  3406.  
  3407. io.sockets.emit('raffles new raffle', Raffles.List[row.insertId]);
  3408. });
  3409. }
  3410.  
  3411. function joinRaffle(raffle_id, slots_number, token, socket) {
  3412. var min = 0;
  3413. var max = Raffles.List[raffle_id].slots-1;
  3414. var ppp = Raffles.List[raffle_id].item.price_per_ticket;
  3415. var entried = false;
  3416. var not_found = false;
  3417. var total_price = 0;
  3418.  
  3419. if(slots_number.length > 1 && users[token].rank != 100) return socket.emit('user eroare', 'You can just select on ticket per raffle!');
  3420.  
  3421. for(var z in Raffles.List[raffle_id].sslots) {
  3422. var itm = Raffles.List[raffle_id].sslots[z];
  3423. for(var i in slots_number) {
  3424. if(slots_number[i] == itm) entried = true;
  3425. break;
  3426. }
  3427. }
  3428.  
  3429. for(var i in slots_number) {
  3430. var itm = slots_number[i];
  3431. if(itm < min || itm > max) {
  3432. not_found = true;
  3433. break;
  3434. }
  3435. }
  3436.  
  3437. for(var z in slots_number) {
  3438. total_price += ppp;
  3439. }
  3440.  
  3441. if(entried == true) return socket.emit('user eroare', 'This ticket doesn\'t exists!');
  3442. if(not_found == true) return socket.emit('user eroare', 'This ticket doesn\'t exists!');
  3443.  
  3444. if(!Raffles.List.hasOwnProperty(raffle_id)) return socket.emit('user eroare', 'This raffle doesn\'t exists!');
  3445. if(Raffles.List[raffle_id].enter == false) return socket.emit('user eroare', 'This raffle is ended!');
  3446.  
  3447. if(Raffles.Joined.hasOwnProperty(raffle_id)) {
  3448. if(Raffles.Joined[raffle_id].indexOf(users[token].steamid) > -1 && users[token].rank != 100) return socket.emit('user eroare', 'You have already joined this raffle!');
  3449. } else Raffles.Joined[raffle_id] = [];
  3450.  
  3451. var steamid = users[token].steamid;
  3452. var name = users[token].name;
  3453. var avatar = users[token].avatar;
  3454.  
  3455. user_balance_check(token, function(err, bal) {
  3456. if(total_price > bal) return socket.emit('user eroare', 'Not enough balance to buy these tickets!');
  3457.  
  3458. for(var z in slots_number) {
  3459. var slot_number = slots_number[z];
  3460.  
  3461. Raffles.Joined[raffle_id].push(users[token].steamid);
  3462.  
  3463. Raffles.List[raffle_id].sslots.push(slot_number);
  3464. Raffles.List[raffle_id].busy_slots[slot_number] = {
  3465. steamid: steamid,
  3466. name: name,
  3467. avatar: avatar,
  3468. color: Raffles.Colors[slot_number]
  3469. };
  3470.  
  3471. if(Raffles.List[raffle_id].users.hasOwnProperty(steamid)) {
  3472. Raffles.List[raffle_id].users[steamid].slots.push({
  3473. slot: slot_number,
  3474. color: Raffles.Colors[slot_number]
  3475. });
  3476. } else {
  3477. Raffles.List[raffle_id].users[steamid] = {
  3478. steamid: steamid,
  3479. name: name,
  3480. avatar: avatar,
  3481. slots: []
  3482. };
  3483. Raffles.List[raffle_id].users[steamid].slots.push({
  3484. slot: slot_number,
  3485. color: Raffles.Colors[slot_number]
  3486. });
  3487. }
  3488.  
  3489. io.sockets.emit('raffles new join raffle', Raffles.List[raffle_id]);
  3490. socket.emit('user alerta', 'You successfully bought slot #' + (parseInt(slot_number)+1) + ' of raffle #' + raffle_id);
  3491.  
  3492. logger.info('[RAFFLES] User ' + users[token].name + ' (' + users[token].steamid + ') joined raffle #' + raffle_id + ' on slot #' + slot_number + ' for ' + total_price + ' coins!');
  3493.  
  3494. pool.query('INSERT INTO raffles_entries SET raffle_name = ' + pool.escape(Raffles.List[raffle_id].item.name) + ', raffle_img = ' + pool.escape(Raffles.List[raffle_id].item.image) + ', raffle_price = ' + pool.escape(Raffles.List[raffle_id].item.price) + ', raffle_ppt = ' + pool.escape(Raffles.List[raffle_id].item.price_per_ticket) + ', raffle_id = ' + pool.escape(raffle_id) + ', slot_number = ' + pool.escape(slot_number) + ', user = ' + pool.escape(steamid) + ', name = ' + pool.escape(name) + ', avatar = ' + pool.escape(avatar) +
  3495. ', won = "-1", time = ' + pool.escape(time()), function(err, row) {
  3496. if(err) throw err;
  3497.  
  3498.  
  3499. });
  3500.  
  3501. if(Raffles.List[raffle_id].slots == Object.keys(Raffles.List[raffle_id].busy_slots).length) {
  3502. Raffles.List[raffle_id].enter = false;
  3503. emitRaffleWinner(raffle_id);
  3504. }
  3505. }
  3506.  
  3507. pool.query('UPDATE users SET balance = balance - ' + pool.escape(parseInt(total_price)) + ', wags = wags + ' + pool.escape(total_price) + ', wagered = wagered + ' + pool.escape(parseInt(total_price)) + ', available = available + ' + pool.escape(parseInt(total_price)) + ' WHERE steamid = ' + pool.escape(users[token].steamid), function(er, ro) {
  3508. if(er) throw er;
  3509.  
  3510. addLog(users[token].steamid, 'raffle_join', '-' + total_price, 'Joined raffle #' + raffle_id + ' on slot #' + slot_number + ' with ' + total_price, function() {
  3511. user_balance_check(token, function(er, bale) {
  3512. checkWebsiteLevel(token, function(level) {
  3513. var $color = '';
  3514.  
  3515. if(level >= 0 && level <= 4) $color = '#919191';
  3516. else if(level >= 5 && level <= 9) $color = '#2F65FA';
  3517. else if(level >= 10) $color = '#FC3232';
  3518.  
  3519. users[token].xp_level = level;
  3520. users[token].xp_color = $color;
  3521. });
  3522.  
  3523. users[token].balance = users[token].balance - parseInt(total_price);
  3524. socket.emit('user balance', users[token].balance);
  3525. });
  3526. });
  3527. });
  3528. });
  3529. }
  3530.  
  3531. function emitRaffleWinner(raffle_id) {
  3532. var secreturile = Raffles.List[raffle_id].secrets.split('-');
  3533. var win_secret = Raffles.WinnerSecret[raffle_id];
  3534. var slot_winner;
  3535. for(var i in secreturile) {
  3536. var sec = secreturile[i];
  3537. if(sec == win_secret) {
  3538. slot_winner = i;
  3539. break;
  3540. }
  3541. }
  3542.  
  3543. pool.query('UPDATE raffles SET ended = 1 WHERE id = ' + pool.escape(raffle_id));
  3544.  
  3545. if(Raffles.List[raffle_id].item.id == 0) {
  3546. if(Raffles.List[raffle_id].item.price >= 8000) GenerationRaffles.coins.high--;
  3547. else if(Raffles.List[raffle_id].item.price >= 3000 && Raffles.List[raffle_id].item.price < 7800) GenerationRaffles.coins.med--;
  3548. else if(Raffles.List[raffle_id].item.price >= 500 && Raffles.List[raffle_id].item.price < 1500) GenerationRaffles.coins.low--;
  3549. } else {
  3550. if(Raffles.List[raffle_id].item.price >= 8000) GenerationRaffles.skins.high--;
  3551. else if(Raffles.List[raffle_id].item.price >= 3000 && Raffles.List[raffle_id].item.price < 7800) GenerationRaffles.skins.med--;
  3552. else if(Raffles.List[raffle_id].item.price >= 500 && Raffles.List[raffle_id].item.price < 1500) GenerationRaffles.skins.low--;
  3553. }
  3554.  
  3555. Raffles.List[raffle_id].winner_slot = slot_winner;
  3556.  
  3557. var useri = Raffles.List[raffle_id].busy_slots;
  3558. for(var i in useri) {
  3559. if(i == slot_winner) {
  3560. Raffles.List[raffle_id].winner_user = useri[i];
  3561.  
  3562. io.sockets.emit('raffle emit winner', Raffles.List[raffle_id]);
  3563.  
  3564. logger.info('[RAFFLE] Winner of raffle #' + raffle_id + ' is ' + useri[i].steamid);
  3565. var socket = ssockets[useri[i].steamid];
  3566.  
  3567. var tokenul = tokens[useri[i].steamid];
  3568.  
  3569. if(Raffles.Tipul[raffle_id] == 0) {
  3570. pool.query('UPDATE users SET balance = balance + ' + pool.escape(parseInt(Raffles.List[raffle_id].item.price)) + ', wwags = wwags + ' + pool.escape(parseInt(Raffles.List[raffle_id].item.price)) + ' WHERE steamid = ' + pool.escape(useri[i].steamid), function(jd, lo) {
  3571. if(jd) throw jd;
  3572.  
  3573. setTimeout(function() {
  3574.  
  3575. addLog(users[tokenul].steamid, 'win_raffle_coins', '+' + parseInt(Raffles.List[raffle_id].item.price), 'Won raffle #' + raffle_id + ' slot #' + slot_winner, function() {
  3576. user_balance_check(tokenul, function(es, bal) {
  3577. if(es) return logger.trace(users[tokenul].steamid + ' - error getting user balance [emitrafflewinner] - 1');
  3578.  
  3579. users[tokenul].balance = bal;
  3580.  
  3581. if(io.sockets.connected[socket]) io.sockets.connected[socket].emit('user balance', bal);
  3582.  
  3583. if(io.sockets.connected[socket]) io.sockets.connected[socket].emit('user alerta', 'You have successfully won raffle #' + raffle_id + ', your balance got updated!');
  3584. });
  3585. });
  3586. }, 10000);
  3587.  
  3588. pool.query('UPDATE raffles_entries SET won = "1" WHERE slot_number = ' + pool.escape(slot_winner) + ' AND raffle_id = ' + pool.escape(raffle_id), function(er, row) {
  3589. pool.query('UPDATE raffles_entries SET ended = "1" WHERE raffle_id = ' + pool.escape(raffle_id), function(e,r) {
  3590. if(e) return logger.trace(useri[i].steamid + ' - error updating raffles entries [emitrafflewinner] - 2');
  3591. pool.query('UPDATE raffles SET winner_steamid = ' + pool.escape(useri[i].steamid) + ', winner_status = "1", winner_statustext = "GOT_COINS", time = ' + pool.escape(time()) + ' WHERE id = ' + pool.escape(raffle_id), function(aaa ,bbb) {
  3592. if(aaa) return logger.trace(useri[i].steamid + ' - error updating raffles [emitrafflewinner] - 3');
  3593. });
  3594. });
  3595. });
  3596. });
  3597. } else {
  3598.  
  3599. pool.query('UPDATE users SET wwags = wwags + ' + pool.escape(parseInt(Raffles.List[raffle_id].item.price)) + ' WHERE steamid = ' + pool.escape(useri[i].steamid), function(jd, lo) {
  3600. if(jd) throw jd;
  3601.  
  3602.  
  3603. Raffles.Prizes[raffle_id] = Raffles.List[raffle_id].item;
  3604. if(Raffles.Prizess.hasOwnProperty(useri[i].steamid)) Raffles.Prizess[useri[i].steamid].push(raffle_id);
  3605. else {
  3606. Raffles.Prizess[useri[i].steamid] = [];
  3607. Raffles.Prizess[useri[i].steamid].push(raffle_id);
  3608. }
  3609.  
  3610. setTimeout(function() {
  3611. if(io.sockets.connected[socket]) io.sockets.connected[socket].emit('user raffle prize settings', raffle_id, raffle_id, Raffles.List[raffle_id].item);
  3612. if(io.sockets.connected[socket]) io.sockets.connected[socket].emit('user alerta', 'You have win the raffle #' + raffle_id + '. If you do not see any popups, refresh to redeem your prize!');
  3613. }, 10000);
  3614.  
  3615. pool.query('UPDATE raffles_entries SET won = "1" WHERE user = ' + pool.escape(useri[i].steamid) + ' AND raffle_id = ' + pool.escape(raffle_id), function(er, row) {
  3616. pool.query('UPDATE raffles_entries SET ended = "1" WHERE raffle_id = ' + pool.escape(raffle_id), function(e,r) {
  3617. if(e) return logger.trace(useri[i].steamid+ ' - error updating raffles entries [emitrafflewinner] - 3');
  3618. pool.query('UPDATE raffles SET winner_steamid = ' + pool.escape(useri[i].steamid) + ', winner_statustext = "NO_ACTION", time = ' + pool.escape(time()) + ' WHERE id = ' + pool.escape(raffle_id), function(aaa, bbb) {
  3619. if(aaa) return logger.trace(useri[i].steamid + ' - error updating raffles [emitrafflewinner] - 3');
  3620. });
  3621. });
  3622. });
  3623.  
  3624. });
  3625. }
  3626. break;
  3627. }
  3628. }
  3629.  
  3630. setTimeout(function() {
  3631. raffleHide(raffle_id);
  3632. }, 60000);
  3633. }
  3634.  
  3635. function raffleHide(raffle_id) {
  3636. delete Raffles.List[raffle_id];
  3637. io.sockets.emit('raffle hide', raffle_id);
  3638. }
  3639.  
  3640. function RaffleSecret() {
  3641. var text = "";
  3642. var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  3643. for(var i=0;i<16;i++) text += possible.charAt(Math.floor(Math.random() * possible.length));
  3644. return text;
  3645. }
  3646.  
  3647. setInterval(function() { checkCurrentRaffles(); }, 60000);
  3648. function checkCurrentRaffles() {
  3649. logger.info('RAW - Checking Generation Raffles');
  3650. logger.info('SKINS - High - ' + GenerationRaffles.skins.high + ' | Med - ' + GenerationRaffles.skins.med + ' | Low - ' + GenerationRaffles.skins.low);
  3651. logger.info('COINS - High - ' + GenerationRaffles.coins.high + ' | Med - ' + GenerationRaffles.coins.med + ' | Low - ' + GenerationRaffles.coins.low);
  3652.  
  3653.  
  3654. if(GenerationRaffles.coins.hasOwnProperty('high') && GenerationRaffles.coins['high'] < 3) {
  3655. var max = 3;
  3656. var to_add = parseInt(max - GenerationRaffles.coins['high']);
  3657.  
  3658. for(var i = 0; i < to_add; i++) {
  3659. var randMoney = Math.floor(Math.random()*(13-8+1)+8);
  3660. var randUsers = Math.floor(Math.random()*(5-1+1)+1);
  3661. if(randUsers == 5) var useri = Math.floor(Math.random()*(5-3+1)+3);
  3662. else var useri = 2;
  3663. createRaffle(parseInt(randMoney*1000) + ' Coins', config.coins_img_url, parseInt(randMoney*1000), '0', useri, 0, 0);
  3664. }
  3665. } else if(!GenerationRaffles.coins.hasOwnProperty('high')) {
  3666. var to_add = 3;
  3667.  
  3668. for(var i = 0; i < to_add; i++) {
  3669. var randMoney = Math.floor(Math.random()*(13-8+1)+8);
  3670. var randUsers = Math.floor(Math.random()*(5-1+1)+1);
  3671. if(randUsers == 5) var useri = Math.floor(Math.random()*(5-3+1)+3);
  3672. else var useri = 2;
  3673. createRaffle(parseInt(randMoney*1000) + ' Coins', config.coins_img_url, parseInt(randMoney*1000), '0', useri, 0, 0);
  3674. }
  3675. }
  3676.  
  3677. if(GenerationRaffles.coins.hasOwnProperty('med') && GenerationRaffles.coins['med'] < 3) {
  3678. var max = 3;
  3679. var to_add = parseInt(max - GenerationRaffles.coins['med']);
  3680.  
  3681. for(var i = 0; i < to_add; i++) {
  3682. var randMoney = Math.floor(Math.random()*(7-5+1)+5);
  3683. var randUsers = Math.floor(Math.random()*(5-1+1)+1);
  3684. if(randUsers == 5) var useri = Math.floor(Math.random()*(5-3+1)+3);
  3685. else var useri = 2;
  3686. createRaffle(parseInt(randMoney*1000) + ' Coins', config.coins_img_url, parseInt(randMoney*1000), '0', useri, 0, 0);
  3687. }
  3688. } else if(!GenerationRaffles.coins.hasOwnProperty('med')) {
  3689. var to_add = 3;
  3690.  
  3691. for(var i = 0; i < to_add; i++) {
  3692. var randMoney = Math.floor(Math.random()*(7-5+1)+5);
  3693. var randUsers = Math.floor(Math.random()*(5-1+1)+1);
  3694. if(randUsers == 5) var useri = Math.floor(Math.random()*(5-3+1)+3);
  3695. else var useri = 2;
  3696. createRaffle(parseInt(randMoney*1000) + ' Coins', config.coins_img_url, parseInt(randMoney*1000), '0', useri, 0, 0);
  3697. }
  3698. }
  3699.  
  3700. if(GenerationRaffles.coins.hasOwnProperty('low') && GenerationRaffles.coins['low'] < 3) {
  3701. var max = 3;
  3702. var to_add = parseInt(max - GenerationRaffles.coins['low']);
  3703.  
  3704. for(var i = 0; i < to_add; i++) {
  3705. var randM = Math.floor(Math.random()*(3-1+1)+1);
  3706. if(randM == 1) var randMoney = 0.5;
  3707. else if(randM == 2) var randMoney = 1;
  3708. else var randMoney = 1.5;
  3709. var randUsers = Math.floor(Math.random()*(5-1+1)+1);
  3710. if(randUsers == 5) var useri = Math.floor(Math.random()*(5-3+1)+3);
  3711. else var useri = 2;
  3712. createRaffle(parseInt(randMoney*1000) + ' Coins', config.coins_img_url, parseInt(randMoney*1000), '0', useri, 0, 0);
  3713. }
  3714. } else if(!GenerationRaffles.coins.hasOwnProperty('low')) {
  3715. var to_add = 3;
  3716.  
  3717. for(var i = 0; i < to_add; i++) {
  3718. var randM = Math.floor(Math.random()*(3-1+1)+1);
  3719. if(randM == 1) var randMoney = 0.5;
  3720. else if(randM == 2) var randMoney = 1;
  3721. else var randMoney = 1.5; var randUsers = Math.floor(Math.random()*(5-1+1)+1);
  3722. if(randUsers == 5) var useri = Math.floor(Math.random()*(5-3+1)+3);
  3723. else var useri = 2;
  3724. createRaffle(parseInt(randMoney*1000) + ' Coins', config.coins_img_url, parseInt(randMoney*1000), '0', useri, 0, 0);
  3725. }
  3726. }
  3727.  
  3728.  
  3729.  
  3730.  
  3731.  
  3732.  
  3733.  
  3734. if(GenerationRaffles.skins.hasOwnProperty('high') && GenerationRaffles.skins['high'] < 2) {
  3735. var max = 2;
  3736. var to_add = parseInt(max - GenerationRaffles.skins['high']);
  3737. var added_itemids = [];
  3738.  
  3739. loop:
  3740. for(var i = 0; i < to_add; i++) {
  3741. for(var h in website_inventory) {
  3742. var itm = website_inventory[h];
  3743. if((itm.price >= 8000 && itm.price <= 15000) && website_inv_raffles.indexOf(itm.id) == -1 && added_itemids.indexOf(itm.id) == -1) {
  3744. added_itemids.push(itm.id);
  3745. var rand = Math.floor(Math.random()*(4-1+1)+1);
  3746. var random_users;
  3747. if(rand == 1) random_users = Math.floor(Math.random()*(5-3+1)+3);
  3748. else random_users = 2;
  3749. createRaffle(itm.name, itm.image, itm.price, itm.id, random_users, 0, 0);
  3750. continue loop;
  3751. }
  3752. }
  3753. }
  3754. } else if(!GenerationRaffles.skins.hasOwnProperty('high')) {
  3755. var to_add = 2;
  3756. var added_itemids = [];
  3757.  
  3758. loop:
  3759. for(var i = 0; i < to_add; i++) {
  3760. for(var h in website_inventory) {
  3761. var itm = website_inventory[h];
  3762. if((itm.price >= 8000 && itm.price <= 15000) && website_inv_raffles.indexOf(itm.id) == -1 && added_itemids.indexOf(itm.id) == -1) {
  3763. added_itemids.push(itm.id);
  3764. var rand = Math.floor(Math.random()*(4-1+1)+1);
  3765. var random_users;
  3766. if(rand == 1) random_users = Math.floor(Math.random()*(5-3+1)+3);
  3767. else random_users = 2;
  3768. createRaffle(itm.name, itm.image, itm.price, itm.id, random_users, 0, 0);
  3769. continue loop;
  3770. }
  3771. }
  3772. }
  3773. }
  3774.  
  3775. if(GenerationRaffles.skins.hasOwnProperty('med') && GenerationRaffles.skins['med'] < 2) {
  3776. var max = 2;
  3777. var to_add = parseInt(max - GenerationRaffles.skins['med']);
  3778. var added_itemids = [];
  3779.  
  3780. loop:
  3781. for(var i = 0; i < to_add; i++) {
  3782. for(var h in website_inventory) {
  3783. var itm = website_inventory[h];
  3784. if((itm.price >= 3000 && itm.price < 7800) && website_inv_raffles.indexOf(itm.id) == -1 && added_itemids.indexOf(itm.id) == -1) {
  3785. added_itemids.push(itm.id);
  3786. var rand = Math.floor(Math.random()*(4-1+1)+1);
  3787. var random_users;
  3788. if(rand == 1) random_users = Math.floor(Math.random()*(5-3+1)+3);
  3789. else random_users = 2;
  3790. createRaffle(itm.name, itm.image, itm.price, itm.id, random_users, 0, 0);
  3791. continue loop;
  3792. }
  3793. }
  3794. }
  3795. } else if(!GenerationRaffles.skins.hasOwnProperty('med')) {
  3796. var to_add = 2;
  3797. var added_itemids = [];
  3798.  
  3799. loop:
  3800. for(var i = 0; i < to_add; i++) {
  3801. for(var h in website_inventory) {
  3802. var itm = website_inventory[h];
  3803. if((itm.price >= 3000 && itm.price < 7800) && website_inv_raffles.indexOf(itm.id) == -1 && added_itemids.indexOf(itm.id) == -1) {
  3804. added_itemids.push(itm.id);
  3805. var rand = Math.floor(Math.random()*(4-1+1)+1);
  3806. var random_users;
  3807. if(rand == 1) random_users = Math.floor(Math.random()*(5-3+1)+3);
  3808. else random_users = 2;
  3809. createRaffle(itm.name, itm.image, itm.price, itm.id, random_users, 0, 0);
  3810. continue loop;
  3811. }
  3812. }
  3813. }
  3814. }
  3815.  
  3816. if(GenerationRaffles.skins.hasOwnProperty('low') && GenerationRaffles.skins['low'] < 2) {
  3817. var max = 2;
  3818. var to_add = parseInt(max - GenerationRaffles.skins['low']);
  3819. var added_itemids = [];
  3820.  
  3821. loop:
  3822. for(var i = 0; i < to_add; i++) {
  3823. for(var h in website_inventory) {
  3824. var itm = website_inventory[h];
  3825. if((itm.price >= 500 && itm.price < 1500) && website_inv_raffles.indexOf(itm.id) == -1 && added_itemids.indexOf(itm.id) == -1) {
  3826. added_itemids.push(itm.id);
  3827. var rand = Math.floor(Math.random()*(4-1+1)+1);
  3828. var random_users;
  3829. if(rand == 1) random_users = Math.floor(Math.random()*(5-3+1)+3);
  3830. else random_users = 2;
  3831. createRaffle(itm.name, itm.image, itm.price, itm.id, random_users, 0, 0);
  3832. continue loop;
  3833. }
  3834. }
  3835. }
  3836. } else if(!GenerationRaffles.skins.hasOwnProperty('low')) {
  3837. var to_add = 2;
  3838. var added_itemids = [];
  3839.  
  3840. loop:
  3841. for(var i = 0; i < to_add; i++) {
  3842. for(var h in website_inventory) {
  3843. var itm = website_inventory[h];
  3844. if((itm.price >= 500 && itm.price < 1500) && website_inv_raffles.indexOf(itm.id) == -1 && added_itemids.indexOf(itm.id) == -1) {
  3845. added_itemids.push(itm.id);
  3846. var rand = Math.floor(Math.random()*(4-1+1)+1);
  3847. var random_users;
  3848. if(rand == 1) random_users = Math.floor(Math.random()*(5-3+1)+3);
  3849. else random_users = 2;
  3850. createRaffle(itm.name, itm.image, itm.price, itm.id, random_users, 0, 0);
  3851. continue loop;
  3852. }
  3853. }
  3854. }
  3855. }
  3856. }
  3857. // RAFFLES22
  3858.  
  3859. // CHAT CODES
  3860. function adminMakeChatCodeGame(users, money) {
  3861. ChatCodes.code = chatcodeCreate();
  3862. ChatCodes.prize = money;
  3863. ChatCodes.max_users = users;
  3864. ChatCodes.users = [];
  3865.  
  3866. var text_message = 'First <b>' + ChatCodes.max_users + '</b> users to write <br><b>' + ChatCodes.code + '</b><br> win <b>' + ChatCodes.prize + '</b> coins each!';
  3867. id_chat_msgs++;
  3868. var props = {
  3869. id: id_chat_msgs,
  3870. steamid: '-1',
  3871. name: 'System',
  3872. avatar: config.domain_name + 'vendor/img/favicon.png',
  3873. rank: 101,
  3874. msg: text_message,
  3875. lang: ''
  3876. };
  3877. chat_msgs.push(props);
  3878. checkChatMessages();
  3879. io.sockets.emit('user chat message add', '', props);
  3880. }
  3881.  
  3882. function chatcodeCreate() {
  3883. var text = "";
  3884. var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
  3885. for(var i=0;i<12;i++) text += possible.charAt(Math.floor(Math.random() * possible.length));
  3886. return text;
  3887. }
  3888. // CHAT CODES
  3889.  
  3890. // MATH CODES
  3891. function adminMakeMathCodeGame(users, money, diff, socket) {
  3892. if(diff == 'easy') {
  3893. var mathQuestion = randomMath_questions.get({
  3894. numberRange: '1-100',
  3895. amountOfNumber: '2-2',
  3896. operations: ['*', '+', '-'],
  3897. nagative: {
  3898. containsNagatives: true,
  3899. negativeChance: '5%'
  3900. },
  3901. exponent: {
  3902. containsExponents: true,
  3903. exponentChance: '5%',
  3904. exponentRange: '2-3'
  3905. }
  3906. });
  3907.  
  3908. MathCodes.question = mathQuestion.question;
  3909. MathCodes.answer = parseInt(mathQuestion.answer);
  3910. MathCodes.prize = money;
  3911. MathCodes.max_users = users;
  3912. MathCodes.users = [];
  3913.  
  3914. var text_message = 'First <b>' + MathCodes.max_users + '</b> users to answer<br><b>(' + MathCodes.question + ') = ?</b><br> win <b>' + MathCodes.prize + '</b> coins each!';
  3915. id_chat_msgs++;
  3916. var props = {
  3917. id: id_chat_msgs,
  3918. steamid: '-1',
  3919. name: 'System',
  3920. avatar: config.domain_name + 'vendor/img/favicon.png',
  3921. rank: 101,
  3922. msg: text_message,
  3923. lang: ''
  3924. };
  3925. chat_msgs.push(props);
  3926. checkChatMessages();
  3927. io.sockets.emit('user chat message add', '', props);
  3928.  
  3929. socket.emit('user alerta', 'The answer for this math code is <b>' + MathCodes.answer + '</b>');
  3930. } else if(diff == 'medium') {
  3931. var mathQuestion = randomMath_questions.get({
  3932. numberRange: '1-3800',
  3933. amountOfNumber: '3-3',
  3934. operations: ['*', '+', '-'],
  3935. nagative: {
  3936. containsNagatives: true,
  3937. negativeChance: '25%'
  3938. },
  3939. exponent: {
  3940. containsExponents: true,
  3941. exponentChance: '25%',
  3942. exponentRange: '2-3'
  3943. }
  3944. });
  3945.  
  3946. MathCodes.question = mathQuestion.question;
  3947. MathCodes.answer = parseInt(mathQuestion.answer);
  3948. MathCodes.prize = money;
  3949. MathCodes.max_users = users;
  3950. MathCodes.users = [];
  3951.  
  3952. var text_message = 'First <b>' + MathCodes.max_users + '</b> users to answer<br><b>(' + MathCodes.question + ') = ?</b><br> win <b>' + MathCodes.prize + '</b> coins each!';
  3953. id_chat_msgs++;
  3954. var props = {
  3955. id: id_chat_msgs,
  3956. steamid: '-1',
  3957. name: 'System',
  3958. avatar: config.domain_name + 'vendor/img/favicon.png',
  3959. rank: 101,
  3960. msg: text_message,
  3961. lang: ''
  3962. };
  3963. chat_msgs.push(props);
  3964. checkChatMessages();
  3965. io.sockets.emit('user chat message add', '', props);
  3966.  
  3967. socket.emit('user alerta', 'The answer for this math code is <b>' + MathCodes.answer + '</b>');
  3968. } else if(diff == 'hard') {
  3969. var mathQuestion = randomMath_questions.get({
  3970. numberRange: '1-8000',
  3971. amountOfNumber: '4-4',
  3972. operations: ['*', '+', '-'],
  3973. nagative: {
  3974. containsNagatives: true,
  3975. negativeChance: '50%'
  3976. },
  3977. exponent: {
  3978. containsExponents: true,
  3979. exponentChance: '50%',
  3980. exponentRange: '2-3'
  3981. }
  3982. });
  3983.  
  3984. MathCodes.question = mathQuestion.question;
  3985. MathCodes.answer = parseInt(mathQuestion.answer);
  3986. MathCodes.prize = money;
  3987. MathCodes.max_users = users;
  3988. MathCodes.users = [];
  3989.  
  3990. var text_message = 'First <b>' + MathCodes.max_users + '</b> users to answer<br><b>(' + MathCodes.question + ') = ?</b><br> win <b>' + MathCodes.prize + '</b> coins each!';
  3991. id_chat_msgs++;
  3992. var props = {
  3993. id: id_chat_msgs,
  3994. steamid: '-1',
  3995. name: 'System',
  3996. avatar: config.domain_name + 'vendor/img/favicon.png',
  3997. rank: 101,
  3998. msg: text_message,
  3999. lang: ''
  4000. };
  4001. chat_msgs.push(props);
  4002. checkChatMessages();
  4003. io.sockets.emit('user chat message add', '', props);
  4004.  
  4005. socket.emit('user alerta', 'The answer for this math code is <b>' + MathCodes.answer + '</b>');
  4006. } else if(diff == 'extreme') {
  4007. var mathQuestion = randomMath_questions.get({
  4008. numberRange: '1-15000',
  4009. amountOfNumber: '5-6',
  4010. operations: ['*', '+', '-'],
  4011. nagative: {
  4012. containsNagatives: true,
  4013. negativeChance: '75%'
  4014. },
  4015. exponent: {
  4016. containsExponents: true,
  4017. exponentChance: '75%',
  4018. exponentRange: '2-5'
  4019. }
  4020. });
  4021.  
  4022. MathCodes.question = mathQuestion.question;
  4023. MathCodes.answer = parseInt(mathQuestion.answer);
  4024. MathCodes.prize = money;
  4025. MathCodes.max_users = users;
  4026. MathCodes.users = [];
  4027.  
  4028. var text_message = 'First <b>' + MathCodes.max_users + '</b> users to answer<br><b>(' + MathCodes.question + ') = ?</b><br> win <b>' + MathCodes.prize + '</b> coins each!';
  4029. id_chat_msgs++;
  4030. var props = {
  4031. id: id_chat_msgs,
  4032. steamid: '-1',
  4033. name: 'System',
  4034. avatar: config.domain_name + 'vendor/img/favicon.png',
  4035. rank: 101,
  4036. msg: text_message,
  4037. lang: ''
  4038. };
  4039. chat_msgs.push(props);
  4040. checkChatMessages();
  4041. io.sockets.emit('user chat message add', '', props);
  4042.  
  4043. socket.emit('user alerta', 'The answer for this math code is <b>' + MathCodes.answer + '</b>');
  4044. }
  4045. }
  4046. // MATH CODES
  4047.  
  4048. // FIRST TO WRITE
  4049. function adminFirstToWriteGame(money) {
  4050. FTWrite.text = randomWord().toString().toUpperCase();
  4051. FTWrite.prize = money;
  4052. FTWrite.enabled = true;
  4053. FTWrite.time = parseInt(time());
  4054.  
  4055. var text_message = 'First user to type<br><b>' + FTWrite.text + '</b><br> win <b>' + FTWrite.prize + '</b> coins!';
  4056. id_chat_msgs++;
  4057. var props = {
  4058. id: id_chat_msgs,
  4059. steamid: '-1',
  4060. name: 'System',
  4061. avatar: config.domain_name + 'vendor/img/favicon.png',
  4062. rank: 101,
  4063. msg: text_message,
  4064. lang: ''
  4065. };
  4066. chat_msgs.push(props);
  4067. checkChatMessages();
  4068. io.sockets.emit('user chat message add', '', props);
  4069. }
  4070. // FIRST TO WRITE
  4071.  
  4072.  
  4073. // CHECK BALANCE
  4074. function user_balance_check(token, cb) {
  4075. pool.query('SELECT balance FROM users WHERE token = ' + pool.escape(token), function(err, row) {
  4076. if(err) throw err;
  4077. if(row.length == 0) return cb(1);
  4078. cb(0, parseInt(row[0].balance));
  4079. });
  4080. }
  4081. //
  4082.  
  4083.  
  4084.  
  4085. // IN CASE SOMETHING ON WITHDRAW HAPPENS. LIKE THE STATUSES DOESN'T UPDATE. USE THIS!@#!
  4086. checkTrades();
  4087. function checkTrades() {
  4088. logger.info('[AUTOMATICALLY TRADES CHECKER] Checking pending trades... Waiting!');
  4089.  
  4090. pool.query('SELECT * FROM trades WHERE status = 0', function(err, row) {
  4091. for(var h in row) {
  4092. var itm = row[h];
  4093. checkTrade(itm.tid, itm.type, itm.user, itm.amount);
  4094. }
  4095. });
  4096. }
  4097.  
  4098.  
  4099. function checkTrade(trade, type, user, amount) {
  4100. ET.ITrade.GetOffer({
  4101. "offer_id": trade
  4102. }, (err, body) => {
  4103. if(err) {
  4104. logger.error('Err on trade #' + trade);
  4105. logger.error(err);
  4106. }
  4107. editTradeBoss(trade, body.response.offer.state, type, user, amount);
  4108. });
  4109. }
  4110.  
  4111. function editTradeBoss(trade, state, type, user, amount) {
  4112. var status = 0;
  4113. var status_text = "";
  4114.  
  4115. if(state == 3) {
  4116. status = 1;
  4117. status_text = "ACCEPTED";
  4118. } else if(state == 7) {
  4119. status = 2;
  4120. status_text = "DECLINED";
  4121. } else {
  4122. status = 3;
  4123. status_text = "NO_LONGER_VALID"
  4124. }
  4125.  
  4126. if(type == 'deposit') {
  4127. if(state == 3) {
  4128. pool.query('UPDATE users SET balance = balance + ' + pool.escape(amount) + ' WHERE steamid = ' + pool.escape(user), function(e,r) {
  4129. logger.info('[AUTOMATICALLY TRADES CHECKER] User got +' + amount + ' from depositing trade #' + trade + ' - STATE ' + status_text + ' (' + status + ')');
  4130. addLog(user, 'trade_resumed_deposit_accepted', '+' + amount, 'User got + ' + amount + ' from trade #' + trade + ' - deposit accepted', function() {
  4131.  
  4132. });
  4133. });
  4134. }
  4135. } else if(type == 'withdraw') {
  4136. if(state == 7) {
  4137. pool.query('UPDATE users SET balance = balance + ' + pool.escape(amount) + ' WHERE steamid = ' + pool.escape(user), function(e,r) {
  4138. logger.info('[AUTOMATICALLY TRADES CHECKER] User got +' + amount + ' from withdrawing trade #' + trade + ' - STATE ' + status_text + ' (' + status + ')');
  4139. addLog(user, 'trade_resumed_withdraw_declined', '+' + amount, 'User got + ' + amount + ' from trade #' + trade + ' - withdraw declined', function() {
  4140.  
  4141. });
  4142. });
  4143. }
  4144. } else if(type == 'raffle') {
  4145. if(state == 7) {
  4146. pool.query('UPDATE users SET balance = balance + ' + pool.escape(amount) + ' WHERE steamid = ' + pool.escape(user), function(e,r) {
  4147. logger.info('[AUTOMATICALLY TRADES CHECKER] User got +' + amount + ' from raffle trade #' + trade + ' - STATE ' + status_text + ' (' + status + ')');
  4148. addLog(user, 'trade_resumed_raffle_declined', '+' + amount, 'User got + ' + amount + ' from trade #' + trade + ' - raffle declined', function() {
  4149.  
  4150. });
  4151. });
  4152. }
  4153. }
  4154.  
  4155.  
  4156. pool.query('UPDATE trades SET status = ' + pool.escape(status) + ', status_text = ' + pool.escape(status_text) + ' WHERE tid = ' + pool.escape(trade), function(er, ro) {
  4157.  
  4158. });
  4159. }
  4160.  
  4161. // UPDATE ADMIN DEPOSITS // WITHDRAWS
  4162.  
  4163. // var admins = [76561198848739044, 76561198832550366, 76561198168946248, 76561198832499408, 76561198832677454];
  4164.  
  4165. // checkAdminsTrades();
  4166. // function checkAdminsTrades() {
  4167. // for(var h in admins) {
  4168. // checkNow(admins[h]);
  4169. // }
  4170. // }
  4171.  
  4172. // function checkNow(admin) {
  4173. // pool.query('SELECT tid, type FROM trades WHERE user = ' + pool.escape(admin), function(er, ro) {
  4174. // if(er) return console.log('An error occurred!');
  4175.  
  4176. // for(var h in ro) {
  4177. // updateAdminTrade(ro[h].tid, ro[h].type, admin);
  4178. // }
  4179. // });
  4180. // }
  4181.  
  4182. // function updateAdminTrade(tid, type, admin) {
  4183. // var $typul;
  4184. // if(type == 'withdraw') $typul = 'Awithdraw';
  4185. // else if(type == 'deposit') $typul = 'Adeposit';
  4186. // else return;
  4187.  
  4188. // pool.query('UPDATE trades SET type = ' + pool.escape($typul) + ' WHERE tid = ' + pool.escape(tid), function(aaa, bbb) {
  4189. // console.log('Trade #' + tid + ' updated to Admin Trade with type ' + $typul + ' [Admin: ' + admin + ']');
  4190. // });
  4191. // }
  4192. // MANUALLY
  4193.  
  4194.  
  4195.  
  4196. // EXPRESS TRADE POLLING
  4197. ET.on('offerReceived', (_offer) => {
  4198. logger.error('Offer received -> ' + _offer.id);
  4199.  
  4200. ET.ITrade.CancelOffer({'offer_id': _offer.id}, (err, body) => {
  4201. if(err) return logger.error('Offer received ' + _offer.id + ' error to be cancelled! ' + body.message);
  4202.  
  4203. logger.error('Offer received ' + _offer.id + ' has been cancelled!');
  4204. });
  4205. });
  4206.  
  4207. ET.on('offerAccepted', (_offer) => {
  4208. if(pending_deposit.hasOwnProperty(_offer.id) && _offer.recipient.items.length > 0) {
  4209. var amount = pending_deposit[_offer.id].amount;
  4210. var userul = pending_deposit[_offer.id].steamid;
  4211. var tokenul = tokens[userul];
  4212. var socketul = ssockets[userul];
  4213.  
  4214. editTrade(_offer.id, 1, function(err) {
  4215. if(err) return logger.error('Error occurred while editing trade #' + _offer.id + ' [offerAccepted] - deposit');
  4216.  
  4217. pool.query('UPDATE users SET balance = balance + ' + pool.escape(amount) + ', available = available - ' + pool.escape(amount) + ', depamount = depamount + ' + pool.escape(amount) + ', deps = deps + 1 WHERE steamid = ' + pool.escape(userul), function(er) {
  4218. if(er) return logger.trace(userul + ' - error updating balance [offerAccepted] - 1');
  4219.  
  4220. if(io.sockets.connected[socketul]) io.sockets.connected[socketul].emit('user alerta', 'You have successfully deposited!<br>You got +<b>' + amount + '</b> coins!');
  4221.  
  4222. logger.error('User ' + users[tokenul].name + ' (' + userul + ') deposited ' + amount + ' coins ($' + parseFloat(amount/1000).toFixed(2) + ' | ' + _offer.recipient.items.length + ')');
  4223.  
  4224. user_balance_check(tokenul, function(eroare, balance) {
  4225. if(eroare) return logger.trace(userul + ' - error checking balance [ offerAccepted ] - 2');
  4226.  
  4227. users[tokenul].balance = balance;
  4228. users[tokenul].depamount += parseInt(amount);
  4229. users[tokenul].available -= parseInt(amount);
  4230.  
  4231. // ADD AFF EARNINGS FROM DEPOSIT
  4232. if(users[tokenul].aff != '' && (parseInt(amount) > 99 && parseInt(1/100*parseInt(amount)) >= 1)) {
  4233. var amountt = parseInt(1/100*parseInt(amount));
  4234. pool.query('UPDATE users SET affamount = affamount + ' + pool.escape(amountt) + ' WHERE steamid = ' + pool.escape(users[tokenul].aff), function(e, r) {
  4235. if(e) throw e;
  4236. });
  4237. }
  4238. // ADD AFF EARNINGS FROM DEPOSIT
  4239.  
  4240. addLog(users[tokenul].steamid, 'deposit_offer_accepted', '+' + amount, 'Deposit offer #' + _offer.id + ' accepted and user got coins!', function() {
  4241.  
  4242. });
  4243.  
  4244. if(io.sockets.connected[socketul]) io.sockets.connected[socketul].emit('user balance', users[tokenul].balance);
  4245. if(io.sockets.connected[socketul]) io.sockets.connected[socketul].emit('user trade done');
  4246. website_getInventory();
  4247.  
  4248. delete pending_deposit[_offer.id];
  4249. delete user_pending_deposit[userul];
  4250. });
  4251. });
  4252. });
  4253. } else if(pending_withdraw.hasOwnProperty(_offer.id) && _offer.sender.items.length > 0) {
  4254. var amount = pending_withdraw[_offer.id].amount;
  4255. var userul = pending_withdraw[_offer.id].steamid;
  4256. var tokenul = tokens[userul];
  4257. var socketul = ssockets[userul];
  4258.  
  4259. editTrade(_offer.id, 1, function(err) {
  4260. if(err) return logger.error('Error occurred while editing trade #' + _offer.id + ' [offerAccepted] - withdraw');
  4261.  
  4262. delete pending_withdraw[_offer.id];
  4263. delete user_pending_withdraw[userul];
  4264. if(io.sockets.connected[socketul]) io.sockets.connected[socketul].emit('user alerta', 'Withdraw trade successfully accepted!');
  4265. if(io.sockets.connected[socketul]) io.sockets.connected[socketul].emit('user trade done');
  4266.  
  4267. website_getInventory();
  4268. });
  4269. } else if(pending_raffle.hasOwnProperty(_offer.id)) {
  4270. var userul = pending_raffle[_offer.id].user;
  4271. var rafid = pending_raffle[_offer.id].raffle_id;
  4272. var tokenul = tokens[userul];
  4273. var socketul = ssockets[userul];
  4274.  
  4275. editTrade(_offer.id, 1, function(err) {
  4276. if(err) return logger.error('Error occurred while editing trade #' + _offer.id + ' [offerAccepted] - raffle');
  4277.  
  4278. pool.query('UPDATE raffles SET winner_status = 1, winner_statustext = "TRADE_ACCEPTED" WHERE id = ' + pool.escape(rafid), function(er, ro) {
  4279. delete pending_raffle[_offer.id];
  4280. if(io.sockets.connected[socketul]) io.sockets.connected[socketul].emit('user alerta', 'Raffle prize successfully accepted!');
  4281. });
  4282. });
  4283. }
  4284. });
  4285.  
  4286. ET.on('offerDeclined', (_offer) => {
  4287. if(pending_deposit.hasOwnProperty(_offer.id) && _offer.recipient.items.length > 0) {
  4288. var amount = pending_deposit[_offer.id].amount;
  4289. var userul = pending_deposit[_offer.id].steamid;
  4290. var tokenul = tokens[userul];
  4291. var socketul = ssockets[userul];
  4292.  
  4293. editTrade(_offer.id, 2, function(err) {
  4294. if(err) return logger.trace(userul + ' - error [offerDeclined] ' + err.toString() + ' - 1');
  4295.  
  4296. delete pending_deposit[_offer.id];
  4297. delete user_pending_deposit[userul];
  4298. if(io.sockets.connected[socketul]) io.sockets.connected[socketul].emit('user eroare', 'The trade has been declined!');
  4299. if(io.sockets.connected[socketul]) io.sockets.connected[socketul].emit('user trade done');
  4300. });
  4301. } else if(pending_withdraw.hasOwnProperty(_offer.id) && _offer.sender.items.length > 0) {
  4302. var amount = pending_withdraw[_offer.id].amount;
  4303. var userul = pending_withdraw[_offer.id].steamid;
  4304. var tokenul = tokens[userul];
  4305. var socketul = ssockets[userul];
  4306.  
  4307. editTrade(_offer.id, 2, function(err) {
  4308. if(err) return logger.trace(userul + ' - error [offerDeclined] ' + err.toString() + ' - 2');
  4309.  
  4310. pool.query('UPDATE users SET balance = balance + ' + pool.escape(amount) + ', withs = withs - 1, available = available + ' + pool.escape(amount) + ', withamount = withamount - ' + pool.escape(amount) + ' WHERE steamid = ' + pool.escape(userul), function(err) {
  4311. if(err) return logger.error('An error updating the balance after declining withdraw on user ' + userul);
  4312.  
  4313. user_balance_check(tokenul, function(aba, hal) {
  4314. if(aba) {
  4315. delete pending_withdraw[_offer.id];
  4316. delete user_pending_withdraw[userul];
  4317. return;
  4318. }
  4319.  
  4320. addLog(users[tokenul].steamid, 'withdraw_offer_declined', '+' + amount, 'Withdraw offer #' + _offer.id + ' declined and user got coins back!', function() {
  4321.  
  4322. });
  4323.  
  4324. users[tokenul].available += parseInt(amount);
  4325. users[tokenul].balance = hal;
  4326.  
  4327. delete pending_withdraw[_offer.id];
  4328. delete user_pending_withdraw[userul];
  4329. if(io.sockets.connected[socketul]) io.sockets.connected[socketul].emit('user eroare', 'The trade has been declined and you have received the coins back!');
  4330. if(io.sockets.connected[socketul]) io.sockets.connected[socketul].emit('user trade done');
  4331. if(io.sockets.connected[socketul]) io.sockets.connected[socketul].emit('user balance', users[tokenul].balance);
  4332. });
  4333. });
  4334. });
  4335. } else if(pending_raffle.hasOwnProperty(_offer.id)) {
  4336. var userul = pending_raffle[_offer.id].user;
  4337. var amount = pending_raffle[_offer.id].amount;
  4338. var rafid = pending_raffle[_offer.id].raffle_id;
  4339. var tokenul = tokens[userul];
  4340. var socketul = ssockets[userul];
  4341.  
  4342. editTrade(_offer.id, 2, function(err) {
  4343. if(err) return logger.error('Error occurred while editing trade #' + _offer.id + ' [offerDeclined] - raffle');
  4344.  
  4345. delete pending_raffle[_offer.id];
  4346.  
  4347. pool.query('UPDATE users SET balance = balance + ' + pool.escape(amount) + ' WHERE steamid = ' + pool.escape(userul), function(e, r) {
  4348. if(io.sockets.connected[socketul]) io.sockets.connected[socketul].emit('user alerta', 'Raffle prize declined.<br>You have received balance worth of skin raffle to your account.');
  4349.  
  4350. addLog(users[tokenul].steamid, 'raffle_offer_declined', '+' + amount, 'Raffle offer #' + _offer.id + ' declined and user got the coins!', function() {
  4351.  
  4352. });
  4353.  
  4354. for(var i in _offer.sender.items) {
  4355. var itm = _offer.sender.items[i].id;
  4356. website_inv_raffles.splice(website_inv_raffles.indexOf(itm), 1);
  4357. }
  4358.  
  4359. pool.query('UPDATE raffles SET winner_status = 2, winner_statustext = "TRADE_DECLINED" WHERE id = ' + pool.escape(rafid), function(er, ro) {
  4360. });
  4361. });
  4362. });
  4363. }
  4364. });
  4365.  
  4366. ET.on('offerNoLongerValid', (_offer) => {
  4367. if(pending_deposit.hasOwnProperty(_offer.id) && _offer.recipient.items.length > 0) {
  4368. var amount = pending_deposit[_offer.id].amount;
  4369. var userul = pending_deposit[_offer.id].steamid;
  4370. var tokenul = tokens[userul];
  4371. var socketul = ssockets[userul];
  4372.  
  4373. editTrade(_offer.id, 3, function(err) {
  4374. if(err) return;
  4375.  
  4376. delete pending_deposit[_offer.id];
  4377. delete user_pending_deposit[userul];
  4378. if(io.sockets.connected[socketul]) io.sockets.connected[socketul].emit('user eroare', 'One or more items are not anymore in your inventory!');
  4379. if(io.sockets.connected[socketul]) io.sockets.connected[socketul].emit('user trade done');
  4380. });
  4381. } else if(pending_withdraw.hasOwnProperty(_offer.id) && _offer.sender.items.length > 0) {
  4382. var amount = pending_withdraw[_offer.id].amount;
  4383. var userul = pending_withdraw[_offer.id].steamid;
  4384. var tokenul = tokens[userul];
  4385. var socketul = ssockets[userul];
  4386.  
  4387. editTrade(_offer.id, 3, function(err) {
  4388. if(err) return;
  4389.  
  4390. pool.query('UPDATE users SET balance = balance + ' + pool.escape(amount) + ', withs = withs - 1, available = available + ' + pool.escape(amount) + ', withamount = withamount - ' + pool.escape(amount) + ' WHERE steamid = ' + pool.escape(userul), function(err) {
  4391. if(err) return logger.error('An error updating the balance after declining withdraw on user ' + userul);
  4392.  
  4393. user_balance_check(tokenul, function(aba, hal) {
  4394. if(aba) {
  4395. delete pending_withdraw[_offer.id];
  4396. delete user_pending_withdraw[userul];
  4397. return;
  4398. }
  4399.  
  4400. addLog(users[tokenul].steamid, 'withdraw_offer_no_longer_available', '+' + amount, 'Withdraw offer #' + _offer.id + ' no longer available, and user got coins back!', function() {
  4401.  
  4402. });
  4403.  
  4404. users[tokenul].available += parseInt(amount);
  4405. users[tokenul].balance = hal;
  4406.  
  4407. delete pending_withdraw[_offer.id];
  4408. delete user_pending_withdraw[userul];
  4409. if(io.sockets.connected[socketul]) io.sockets.connected[socketul].emit('user eroare', 'One or more items are not anymore in your inventory and you have received the coins back!');
  4410. if(io.sockets.connected[socketul]) io.sockets.connected[socketul].emit('user trade done');
  4411. if(io.sockets.connected[socketul]) io.sockets.connected[socketul].emit('user balance', users[tokenul].balance);
  4412. });
  4413. });
  4414. });
  4415. } else if(pending_raffle.hasOwnProperty(_offer.id)) {
  4416. var userul = pending_raffle[_offer.id].user;
  4417. var amount = pending_raffle[_offer.id].amount;
  4418. var rafid = pending_raffle[_offer.id].raffle_id;
  4419. var tokenul = tokens[userul];
  4420. var socketul = ssockets[userul];
  4421.  
  4422. editTrade(_offer.id, 3, function(err) {
  4423. if(err) return logger.error('Error occurred while editing trade #' + _offer.id + ' [offerNoLongerValid] - raffle');
  4424.  
  4425. delete pending_raffle[_offer.id];
  4426.  
  4427. pool.query('UPDATE users SET balance = balance + ' + pool.escape(amount) + ' WHERE steamid = ' + pool.escape(userul), function(e, r) {
  4428. if(io.sockets.connected[socketul]) io.sockets.connected[socketul].emit('user alerta', 'Raffle prize no longer valid.<br>You have received balance worth of skin raffle to your account.');
  4429.  
  4430. for(var i in _offer.sender.items) {
  4431. var itm = _offer.sender.items[i].id;
  4432. website_inv_raffles.splice(website_inv_raffles.indexOf(itm), 1);
  4433. }
  4434.  
  4435. addLog(users[tokenul].steamid, 'raffle_offer_no_longer_available', '+' + amount, 'Raffle offer #' + _offer.id + ' no longer available, and user got coins!', function() {
  4436.  
  4437. });
  4438.  
  4439. pool.query('UPDATE raffles SET winner_status = 3, winner_statustext = "TRADE_NO_LONGER_VALID" WHERE id = ' + pool.escape(rafid), function(er, ro) {
  4440. });
  4441. });
  4442. });
  4443. }
  4444. });
  4445. // EXPRESS TRADE POLLING
  4446.  
  4447.  
  4448. // GET WEBSITE LEVEL
  4449. function checkWebsiteLevel(token, cb) {
  4450. var currentXp = parseInt(users[token].wagered);
  4451.  
  4452. for(var i = 0; i < 500; i++) {
  4453. var xp1 = parseInt(parseInt(i+1)*1000 + parseInt(i+1)*1000);
  4454. var xp2 = parseInt(parseInt(i)*1000 + parseInt(i)*1000);
  4455. var old_xp = parseInt(xp2*parseInt(i) * parseInt(i)*1.5);
  4456. var new_xp = parseInt(xp1*parseInt(i+1) * parseInt(i+1)*1.5);
  4457.  
  4458. if(currentXp >= old_xp && currentXp <= new_xp) {
  4459. cb(parseInt(i), currentXp, new_xp, old_xp);
  4460. break;
  4461. }
  4462.  
  4463. // console.log(old_xp + ' - ' + new_xp);
  4464. // console.log('Level ' + parseInt(i+1) + ' - xp needed: ' + new_xp);
  4465. }
  4466. }
  4467. // GET WEBSITE LEVEL
  4468.  
  4469. // GET DAILY REWARD
  4470. function getDailyReward(token) {
  4471. var levelReward = 8;
  4472. var yourReward = 42;
  4473. var yourLevel = users[token].xp_level;
  4474.  
  4475. for(var i = 0; i < yourLevel; i++) {
  4476. yourReward += parseInt(levelReward);
  4477. }
  4478.  
  4479. return parseInt(yourReward);
  4480. }
  4481. // GET DAILY REWARD
  4482.  
  4483.  
  4484. // AVATAR IMAGE CHECKER
  4485. function avatarUserChecker(token, cb) {
  4486. var userul = users[token].steamid;
  4487.  
  4488. var link = 'https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=' + config.steam_api_key + '&steamids=' + encodeURI(userul);
  4489. request(link, function(er, r, body) {
  4490. if(r.statusCode == 200) {
  4491.  
  4492. var bodi = JSON.parse(body);
  4493. var avatar = bodi.response.players[0].avatarfull.split('/')[8].split('_')[0];
  4494.  
  4495. if(avatar == config.image_md5_checksum) return cb(true);
  4496.  
  4497. cb(false);
  4498.  
  4499. } else cb(false);
  4500. });
  4501. }
  4502. // AVATAR IMAGE CHECKER
  4503.  
  4504. // USER GAME CHECKER
  4505. function gamesUserChecker(token, cb) {
  4506. var userul = users[token].steamid;
  4507.  
  4508. var link = 'https://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=' + config.steam_api_key + '&steamid=' + encodeURI(userul);
  4509. request(link, function(er, r, body) {
  4510. if(r.statusCode == 200) {
  4511.  
  4512. var bodi = JSON.parse(body);
  4513. var games = [730, 578080, 570, 440, 433850];
  4514.  
  4515. for(var h in bodi.response.games) {
  4516. var appid = bodi.response.games[h].appid;
  4517. var playtime = bodi.response.games[h].playtime_forever;
  4518.  
  4519. for(var i in games) {
  4520. var joc = games[i];
  4521.  
  4522. if(appid == joc && playtime >= 3000) {
  4523. return cb(true);
  4524. }
  4525. }
  4526. }
  4527.  
  4528. cb(false);
  4529.  
  4530. } else cb(false);
  4531. });
  4532. }
  4533. // USER GAME CHECKER
  4534.  
  4535.  
  4536. // ADD LOGS
  4537. function addLog(steamid, action, amount, log, cb) {
  4538. pool.query('INSERT INTO logs SET steamid = ' + pool.escape(steamid) + ', action = ' + pool.escape(action) + ', amount = ' + pool.escape(amount) + ', log = ' + pool.escape(log) + ', time = ' + pool.escape(time()), function(err, row) {
  4539. if(err) {
  4540.  
  4541.  
  4542. logger.error('ERROR OCCURRED WHILE ADDING LOG!!!! ');
  4543. logger.error('USER ' + steamid + ' - ACTION ' + action + ' - AMOUNT ' + action + ' - LOG ' + log);
  4544.  
  4545.  
  4546. pool.query('UPDATE users SET ban = 1 WHERE steamid = ' + pool.escape(steamid), function(e, r) {
  4547. var socketul = ssockets[steamid];
  4548.  
  4549. if(io.sockets.connected[socketul]) {
  4550. io.sockets.connected[socketul].emit('user eroare', 'Our System has detected that you are partaking in fraudulent activities on ' + config.site_name + ', if this is an error please contact us!');
  4551. setTimeout(function() {
  4552. io.sockets.connected[socketul].emit('user refresh');
  4553. }, 5000);
  4554. }
  4555. });
  4556.  
  4557. return;
  4558. }
  4559.  
  4560. cb();
  4561. });
  4562. }
  4563. // ADD LOGS
  4564.  
  4565.  
  4566. // CHECK CHAT MESSAGES
  4567. function checkChatMessages() {
  4568. var streamers = 0;
  4569. var main = 0;
  4570. var turkish = 0;
  4571.  
  4572. for(var h in chat_msgs) {
  4573. if(chat_msgs[h].lang == 'streamers') streamers++;
  4574. if(chat_msgs[h].lang == 'main') main++;
  4575. if(chat_msgs[h].lang == 'turkish') turkish++;
  4576. }
  4577.  
  4578. if(streamers >= 30) {
  4579. for(var i in chat_msgs) {
  4580. if (chat_msgs[i].lang == 'streamers') {
  4581. chat_msgs.splice(i, 1);
  4582. break;
  4583. }
  4584. }
  4585.  
  4586. for(var i in chat_msgs) {
  4587. if (chat_msgs[i].lang == '') {
  4588. chat_msgs.splice(i, 1);
  4589. }
  4590. }
  4591. }
  4592.  
  4593. if(main >= 30) {
  4594. for(var i in chat_msgs) {
  4595. if (chat_msgs[i].lang == 'main') {
  4596. chat_msgs.splice(i, 1);
  4597. break;
  4598. }
  4599. }
  4600.  
  4601. for(var i in chat_msgs) {
  4602. if (chat_msgs[i].lang == '') {
  4603. chat_msgs.splice(i, 1);
  4604. }
  4605. }
  4606. }
  4607.  
  4608. if(turkish >= 30) {
  4609. for(var i in chat_msgs) {
  4610. if (chat_msgs[i].lang == 'turkish') {
  4611. chat_msgs.splice(i, 1);
  4612. break;
  4613. }
  4614. }
  4615.  
  4616. for(var i in chat_msgs) {
  4617. if (chat_msgs[i].lang == '') {
  4618. chat_msgs.splice(i, 1);
  4619. }
  4620. }
  4621. }
  4622. }
  4623. // CHECK CHAT MESSAGES
  4624.  
  4625. function sendUsersOnline(socket) {
  4626. var Users = [];
  4627.  
  4628. for(var h in Useri_IP) {
  4629. var itm = Useri_IP[h];
  4630.  
  4631. Users.push({
  4632. name: itm.name,
  4633. steamid: itm.steamid,
  4634. avatar: itm.avatar,
  4635. rank: itm.rank
  4636. });
  4637. }
  4638.  
  4639. socket.emit('admin sent users online', Users);
  4640. }
  4641.  
  4642.  
  4643. function antiSpam(socket, token, callback) {
  4644. if(antispam_user[token]+2 > time()) return socket.emit('user eroare', 'We are currently processing your last request! Please wait.');
  4645. else antispam_user[token] = time();
  4646. callback();
  4647. }
  4648.  
  4649. function antiSpamEndpoints(socket, token, callback) {
  4650. if(anti_spam_endpoints[token]+60 > time()) return socket.emit('user eroare', 'Please wait 1 minute before checking again for <b>hours played</b>/<b>steam picture</b>.');
  4651. else anti_spam_endpoints[token] = time();
  4652. callback();
  4653. }
  4654.  
  4655. function check_errors() {
  4656. process.on('uncaughtException', function (err) {
  4657. logger.error('[ERROR]');
  4658. logger.error(err);
  4659. });
  4660. }
  4661.  
  4662. function database_connection() {
  4663. pool = mysql.createConnection(db_config);
  4664. pool.connect(function(err) {
  4665. if(err) {
  4666. logger.error('[ERROR] Connecting to database "' + err.toString() + '"');
  4667. setTimeout(function() { database_connection(); }, 2500);
  4668. }
  4669. else
  4670. {
  4671. logger.trace('[INFO] Connected to database!');
  4672. }
  4673. });
  4674. pool.on('error', function(err) {
  4675. logger.error('[ERROR] Syntax "' + err.toString() + '"');
  4676. logger.error(err);
  4677. if(err.code == 'PROTOCOL_CONNECTION_LOST') {
  4678. setTimeout(function() { database_connection(); }, 2500);
  4679. logger.trace('[INFO] Trying to reconnect to database...');
  4680. }
  4681. else
  4682. {
  4683. logger.error('[ERROR] Connecting to database ' + err.toString());
  4684. }
  4685. });
  4686. }
  4687.  
  4688. function makeSecret() {
  4689. var text = "";
  4690. var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  4691. for(var i=0;i<8;i++) text += possible.charAt(Math.floor(Math.random() * possible.length));
  4692. return text;
  4693. }
  4694.  
  4695. function makePercentage() {
  4696. return Math.random() * (99.9999999999 - 0.0000000001) + 0.0000000001;
  4697. }
  4698.  
  4699. function isPositiveNumber(n) {
  4700. return 0 === n % (!isNaN(parseFloat(n)) && 0 <= ~~n);
  4701. }
  4702.  
  4703. function encrypt(key, data) {
  4704. var cipher = crypto.createCipher('aes-256-cbc', key);
  4705. var crypted = cipher.update(data, 'utf-8', 'hex');
  4706. crypted += cipher.final('hex');
  4707.  
  4708. return crypted;
  4709. }
  4710.  
  4711. function decrypt(key, data) {
  4712. var decipher = crypto.createDecipher('aes-256-cbc', key);
  4713. var decrypted = decipher.update(data, 'hex', 'utf-8');
  4714. decrypted += decipher.final('utf-8');
  4715.  
  4716. return decrypted;
  4717. }
  4718.  
  4719. function isFloat(value) {
  4720. return !isNaN(value) && value.toString().indexOf('.') != -1
  4721. }
  4722.  
  4723. function chat_message_escape(text) {
  4724. var map = {
  4725. '&': '&amp;',
  4726. '<': '&lt;',
  4727. '>': '&gt;',
  4728. '"': '&quot;',
  4729. "'": '&#039;'
  4730. };
  4731.  
  4732. return text.replace(/[&<>"']/g, function(m) { return map[m]; });
  4733. }
  4734.  
  4735. function time() {
  4736. return parseInt(new Date().getTime()/1000);
  4737. }
  4738.  
  4739. String.prototype.replaceAll = function(search, replacement) {
  4740. var target = this;
  4741. return target.replace(new RegExp(search, 'g'), replacement);
  4742. };
  4743.  
  4744. function tofix(x) {
  4745. if (Math.abs(x) < 1.0) {
  4746. var e = parseInt(x.toString().split('e-')[1]);
  4747. if (e) {
  4748. x *= Math.pow(10,e-1);
  4749. x = '0.' + (new Array(e)).join('0') + x.toString().substring(2);
  4750. }
  4751. } else {
  4752. var e = parseInt(x.toString().split('+')[1]);
  4753. if (e > 20) {
  4754. e -= 20;
  4755. x /= Math.pow(10,e);
  4756. x += (new Array(e+1)).join('0');
  4757. }
  4758. }
  4759. return x;
  4760. }
Add Comment
Please, Sign In to add comment