Advertisement
ellerq

Untitled

Apr 25th, 2017
623
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 58.12 KB | None | 0 0
  1. /* ---------------------------------------------------------------- */
  2. /* -------------------------- GATE SERVER ------------------------- */
  3. /* ---------------------------------------------------------------- */
  4. // type 1 or 2 (bet, info)
  5.  
  6.  
  7. var g_ServerPort = 8080;
  8. var g_TotpKey = 'V8lORhd3Gs3rvH47M4xGx8iE3EM=';
  9. var g_WebsiteUrl = 'http://';
  10. var g_SteamAPIKey = '9A3E02BFD7E920FC4473010E9FE7';
  11. var g_ExpressSecret = 'yCpOqsGHj32PVeKf';
  12. var g_ExpressName = 'up5J6gY0kiejCdOI';
  13. var g_PricesUpdate = 600;
  14. var g_Maintenance = false;
  15. var g_Maintenance_Head = 'Тех. обслуживание';
  16. var g_Maintenance_Text = 'Проводится 30 минутное тех. обслуживание. Не волнуйтесь, перед его началом подтвердяться депозиты и выводы.';
  17. var g_Message = false;
  18. var g_MessageText = '';
  19. var g_Discount = 10;
  20. var g_Bonus = 50000;
  21.  
  22. /* REQUIRES */
  23. var speakeasy = require('speakeasy');
  24. var request = require('request');
  25. var io = require('socket.io').listen(g_ServerPort);
  26. var mysql = require('mysql');
  27. var Random = require("random-js");
  28. var crypto = require('crypto');
  29. var random = new Random(Random.engines.mt19937().autoSeed());
  30. var express = require('express');
  31. var passport = require('passport');
  32. var util = require('util');
  33. var session = require('express-session');
  34. var SteamStrategy = require('passport-steam').Strategy;
  35. var fs = require('fs');
  36. var objectAssign = require('object-assign');
  37. var csgoimAPI = require('csgo-im-api');
  38. var api = new csgoimAPI('a0c409hf7anzx4v580a0lxd');
  39.  
  40. /* VARIABLES */
  41. var tokenSalt = '';
  42. var bots = [];
  43. var connectedClients = {};
  44. var depositServer = '';
  45. var types = ['deposit'];
  46. var bans = [];
  47. var total_players = 0;
  48. var system = {
  49. version : {
  50. gate : "1.6",
  51. deposit : "1.5",
  52. bot : "1.3"
  53. },
  54. bots : {
  55. 0 : 0,
  56. 1 : 0,
  57. 2 : 0
  58. },
  59. steam : {
  60. sessions: "normal",
  61. steam: "normal",
  62. trades: "normal",
  63. }
  64. }
  65. var perfoming = [];
  66. var transfering = [];
  67. var withdrawing = [];
  68.  
  69. var deposit_info = {
  70. mindep : 0,
  71. maxdep : 10000000,
  72. maxitems : 16,
  73. minprice : 999,
  74. deposit : true,
  75. withdraw : true
  76. }
  77.  
  78. var active_timeout = {};
  79. var players = {};
  80. var online = 138;
  81. var total_trades = 134568;
  82. var errors = ['Error loading bot`s/user`s inventory.',
  83. 'Can`t make an offer.',
  84. 'Please enable mobile authenticator.',
  85. 'You were late with accepting an offer.',
  86. 'You declined an offer.',
  87. 'Unexpected state. Please contact support with following ticket: ',
  88. 'Too much errors. If you missing items please contact support with following ticket: ',
  89. 'Offer summ is lower than minimum deposit.',
  90. 'Prices changed. Please refresh page and try again.',
  91. 'All bots are busy. Please try again later.',
  92. 'Item`s status changed.',
  93. 'You dont have that item.',
  94. 'Unable to save settings. Please try again later.',
  95. 'Cant get trade hold duration. Please try again later.',
  96. 'Lobby is not joinable.',
  97. 'Unable to join lobby.',
  98. 'You have reached max items per deposit.',
  99. 'You can only buy on ',
  100. 'You cant bet against yourself.',
  101. 'Service is offline.',
  102. 'There was an error during the transfer. Try again later.',
  103. 'You ve selected 0 items.',
  104. 'You are not the owner of this service.',
  105. '',
  106. 'You can`t join during the roll.',
  107. 'You can`t bet more items. Limit exceeded.',
  108. 'Your bet is lower than min. deposit value.',
  109. 'Your bet is higher than max. deposit value.',
  110. 'Referral code is already taken.',
  111. 'Referral code is too long.',
  112. 'Error acquired during code activation.',
  113. 'Code does not exist.',
  114. 'There are not enough items to give you as bonus. Please try again later.',
  115. 'You must have at least level 1 to withdraw bonus items.',
  116. 'Neither referral nor daily bonuses available.',
  117. 'Failed to verify account: you dont have CS:GO on your account.',
  118. 'Failed to verify account: Steam currently unavaible.',
  119. 'Failed to collect bonus: your account is not verified.',
  120. 'Failed to activate code: referral`s account is not verified.',
  121. 'Account already verified.',
  122. 'Already performing an action.',
  123. 'Already referral.',
  124. 'You cannot activate your own code.',
  125. 'Failed to activate code: referral is not partner.',
  126. 'Deposit server is offline.',
  127. 'Deposit is currently disabled.',
  128. 'Withdraw is currently disabled.',
  129. 'Jackpot is currently disabled.',
  130. 'You are already perfoming a deposit/withdraw action.',
  131. 'You dont have enough money on balance.',
  132. 'You are already perfoming a deposit/withdraw action.',
  133. 'You dont have enough money on balance.',
  134. 'You can reload withdraw list once every 30 seconds.',
  135. 'There is no such code.',
  136. 'You already activated a code',
  137. 'You haven`t deposited 25$.',
  138. 'You have already activated the code.'];
  139. var mysqlInfo;
  140. mysqlInfo = {
  141. host : 'ERROR.beget.tech',
  142. user : 'ERROR',
  143. password : 'ERROR',
  144. database : 'ERROR',
  145. charset : 'utf8_general_ci'
  146. };
  147. var mysqlConnection;
  148.  
  149. /* HELPER FUNCTIONS */
  150. /* TOKEN GENERATOR */
  151. function generateToken(length){
  152. var symbols = ['1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
  153. var token = '';players
  154. for(var i = 0; i < length; i++){
  155. token = token + symbols[random.integer(0, symbols.length-1)];
  156. }
  157. return token;
  158. }
  159.  
  160. /* SHA-1 */
  161. function sha(string){
  162. return crypto.createHash('sha1').update(string).digest("hex");
  163. }
  164.  
  165. /* NEW TOKEN SALT */
  166. function salt(){
  167. tokenSalt = generateToken(16);
  168. mysqlConnection.query('UPDATE settings SET value = \''+tokenSalt+'\' WHERE setting = \'salt\'', function(err, rows, fields) {if(err) {console.log("MySQL error: " + err);if(err.code === 'PROTOCOL_CONNECTION_LOST'){handleDisconnect();}}});
  169. console.log('[INFO] New token salt is ' + tokenSalt);
  170. //console.log('Test sha(sha(salt:feed4rzbot1)): ' + sha(tokenSalt + ':feed4rzbot1'));
  171. mysqlConnection.query('SELECT * FROM users', function(err, row, results){
  172. if(err) {
  173. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  174. handleDisconnect();
  175. }
  176. console.log('[ERROR] MySQL error: ' + err);
  177. //return false;
  178. }
  179. if(row && row.length > 0){
  180. total_players = row.length;
  181. }
  182. });
  183. mysqlConnection.query('SELECT * FROM settings WHERE settings = \'trades\'', function(err, row, results){
  184. if(err) {
  185. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  186. handleDisconnect();
  187. }
  188. console.log('[ERROR] MySQL error: ' + err);
  189. //return false;
  190. }
  191. if(row && row.length > 0){
  192. total_trades = row[0].value;
  193. }
  194. });
  195. console.log('[LOG] Test sha: ' + sha("sha"));
  196. }
  197.  
  198. /* MYSQL CONNECT */
  199. function handleDisconnect() {
  200. mysqlConnection = mysql.createConnection(mysqlInfo);
  201.  
  202. mysqlConnection.connect(function(err) {
  203. if(err) {
  204. console.log('[ERROR] Connecting to db:', err);
  205. setTimeout(handleDisconnect, 2000);
  206. } else {
  207. console.log('[INFO] Connected to db!');
  208. salt();
  209. }
  210. });
  211.  
  212. mysqlConnection.on('error', function(err) {
  213. console.log('DB error', err);
  214. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET') {
  215. handleDisconnect();
  216. } else {
  217. throw err;
  218. }
  219. });
  220. }
  221. handleDisconnect();
  222.  
  223. /* FIND PLAYER BY STEAMID */
  224. function findPlayerBySteamID(steamid){
  225. var id = false;
  226. for(var key in players){
  227. if(players[key].steamid == steamid){
  228. id = players[key].id;
  229. }
  230. }
  231. return id;
  232. }
  233.  
  234. /* FIND PLAYER BY SOCKETID */
  235. function findPlayerByID(id){
  236. var steamid = false;
  237. for(var key in players){
  238. if(players[key].id == id){
  239. steamid = players[key].steamid;
  240. }
  241. }
  242. return steamid;
  243. }
  244.  
  245. /* GET SERVER BY ID */
  246. function getServerType(id){
  247. if(depositServer == id) return true;
  248. return false;
  249. }
  250.  
  251. /* GET SERVER BY TYPE */
  252. function getServerID(type){
  253. if(type == 0) return depositServer;
  254. return false;
  255. }
  256.  
  257. /* CHECK SALT */
  258. function checkSalt(steamid, salt){
  259. if(sha(tokenSalt + ':' + steamid) == salt){
  260. return true;
  261. } else {
  262. return false;
  263. }
  264. }
  265.  
  266. /* TIMEOUT SERVICE */
  267. function timeoutservice(service){
  268. mysqlConnection.query('UPDATE services SET active = \'0\' WHERE private_api = \''+service+'\'', function(err, row, results){if(err) {if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){handleDisconnect();}console.log('[ERROR] MySQL error: ' + err);}});
  269. }
  270.  
  271. var CompleteCounter = function(){
  272. var self = {};
  273. self.time = 0;
  274. self.timer = setInterval(function(){self.time++;}, 10);
  275. self.stop = function(){
  276. clearInterval(self.timer);
  277. return self.time;
  278. }
  279. return self;
  280. };
  281.  
  282. /* LOAD STATS */
  283. function loadTradelink(steamid){
  284. console.log('[LOG] Loading tradelink for ' + steamid + '...');
  285. mysqlConnection.query('SELECT * FROM users WHERE steamid = \''+steamid+'\'', function(err, row, results){
  286. if(err) {
  287. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  288. handleDisconnect();
  289. }
  290. console.log('[ERROR] MySQL error: ' + err);
  291. //return false;
  292. }
  293. if(row && row.length > 0){
  294. console.log('[LOG] Tradelink for ' + steamid + ' loaded.');
  295. io.to(findPlayerBySteamID(steamid)).emit('tradelink', { tradelink : row[0].tradelink });
  296. } else {
  297. //return false;
  298. }
  299. });
  300. }
  301.  
  302. /* LOAD BALANCE */
  303. function loadBalance(steamid){
  304. console.log('[LOG] Loading balance for ' + steamid + '...');
  305. mysqlConnection.query('SELECT * FROM users WHERE steamid = \''+steamid+'\'', function(err, row, results){
  306. if(err) {
  307. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  308. handleDisconnect();
  309. }
  310. console.log('[ERROR] MySQL error: ' + err);
  311. //return false;
  312. }
  313. if(row && row.length > 0){
  314. console.log('[LOG] Balance for ' + steamid + ' loaded.');
  315. io.to(findPlayerBySteamID(steamid)).emit('balance', { balance : row[0].balance });
  316. } else {
  317. //return false;
  318. }
  319. });
  320. }
  321.  
  322. /* GET ITEMS */
  323. function getItems(bot, steamid){
  324. var cc = CompleteCounter();
  325. console.log('[LOG] Loading steam inventory for ' + steamid + '...');
  326. api.getSteamInventory({ steamid : steamid, appid : 570, contextid : 2 }, function(error, iitems) {
  327. if(error) {
  328. console.log("[ERROR] Can`t load inventory for " + steamid+'. ' + error);
  329. } else {
  330. var items = {};
  331. var counter = 0;
  332. for(var key in iitems){
  333. var item = iitems[key];
  334. var price = prices[item.market_hash_name]*1000;
  335. var market_hash_name = item.market_hash_name;
  336. item.price = price;
  337. item.color = 'b0c3d9';
  338.  
  339. for(var j = 0; j < item.tags.length; j++){
  340. if(item.tags[j].category == 'Rarity') item.color = item.tags[j].color;
  341. }
  342. if(item.tradable == 1 && price >= 5000 && market_hash_name.indexOf('Souvenir') == -1 && (market_hash_name.indexOf('Case') == -1 || market_hash_name.indexOf('Key') > -1) && market_hash_name.indexOf('★ StatTrak') == -1 && market_hash_name != "Tec-9 | Tornado (Field-Tested)" && market_hash_name.indexOf('Box') == -1 && market_hash_name.indexOf('Graffiti') == -1 && market_hash_name.indexOf('Capsule') == -1 && market_hash_name.indexOf('Cologne 2016 Legends') == -1){
  343. items[item.id] = { market_hash_name : item.market_hash_name, color : item.color, assetid : item.id, price : price, img : item.icon_url };
  344. counter++;
  345. }
  346. }
  347. mysqlConnection.query('DELETE FROM items WHERE bot = \''+bot+'\'', function(err, rows, fields) {
  348. if(err) {
  349. console.log('[ERROR] MySQL error: ' + err);
  350. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  351. handleDisconnect();
  352. }
  353. } else {
  354. console.log('[LOG] MySQL success log: \n' + JSON.stringify(rows));
  355. }
  356. });
  357. for(var key in items){
  358. mysqlConnection.query('INSERT INTO items (`assetid`, `market_hash_name`, `img`, `price`, `bot`, `time`, `color`) VALUES (\''+key+'\', \''+removescript(removequots(items[key].market_hash_name))+'\', \''+items[key].img+'\',\''+items[key].price+'\',\''+bot+'\',\''+Math.floor(Date.now()/1000)+'\',\''+items[key].color+'\')', function(err, rows, fields) {
  359. if(err) {
  360. console.log('[ERROR] MySQL error: ' + err);
  361. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  362. handleDisconnect();
  363. }
  364. } else {
  365. console.log('[LOG] MySQL success log: \n' + JSON.stringify(rows));
  366. }
  367. });
  368. }
  369. console.log('[LOG] Loaded ' + counter + ' depositable items for ' + steamid + '.');
  370. console.log('[LOG] Completed in ' + cc.stop()/100 + ' seconds.');
  371. }
  372. });
  373. }
  374. getItems(0, '76561197976583523');
  375. setTimeout(function(){getItems(1, '76561198284997423');},60000);
  376. setTimeout(function(){getItems(2, '76561198285426768');},60000*2);
  377.  
  378. /* LOAD STEAM INV */
  379. function loadSteamInv(steamid, r){
  380. var retry = r || 3;
  381. if(retry == 0) return;
  382. var cc = CompleteCounter();
  383. console.log('[LOG] Loading steam inventory for ' + steamid + '...');
  384. api.getSteamInventory({ steamid : steamid, appid : 570, contextid : 2 }, function(error, iitems) {
  385. if(error) {
  386. console.log("[ERROR] Can`t load inventory for " + steamid+'. ' + error);
  387. loadSteamInv(steamid, retry - 1);
  388. } else {
  389. var time = Math.floor(Date.now()/1000);
  390. players[steamid].inventory.lastupdate = time;
  391. players[steamid].inventory.items = {};
  392. var counter = 0;
  393. var summ = 0;
  394. for(var key in iitems){
  395. var item = iitems[key];
  396. var price = prices[item.market_hash_name]*1000;
  397. var market_hash_name = item.market_hash_name;
  398. item.price = price;
  399. item.color = 'b0c3d9';
  400.  
  401. for(var j = 0; j < item.tags.length; j++){
  402. if(item.tags[j].category == 'Rarity') item.color = item.tags[j].color;
  403. }
  404. if(item.tradable == 1 && price >= 500 && market_hash_name.indexOf('Souvenir') == -1 && (market_hash_name.indexOf('NULL') == -1 || market_hash_name.indexOf('Key') > -1) && market_hash_name.indexOf('NULL') == -1 && market_hash_name != "Tec-9 | Tornado (Field-Tested)" && market_hash_name.indexOf('Box') == -1 && market_hash_name.indexOf('Graffiti') == -1 && market_hash_name.indexOf('Capsule') == -1 && market_hash_name.indexOf('Cologne 2016 Legends') == -1){
  405. //if(item.tradable == 1 && price >= 500 && market_hash_name.indexOf('Souvenir') == -1 && (market_hash_name.indexOf('Case') == -1 || market_hash_name.indexOf('Key') > -1) && market_hash_name.indexOf('? StatTrak') == -1 && market_hash_name != "Tec-9 | Tornado (Field-Tested)" && market_hash_name.indexOf('Box') == -1 && market_hash_name.indexOf('Graffiti') == -1 && market_hash_name.indexOf('Capsule') == -1 && market_hash_name.indexOf('Cologne 2016 Legends') == -1){
  406. players[steamid].inventory.items[item.id] = { market_hash_name : item.market_hash_name, color : item.color, assetid : item.id, price : price, img : item.icon_url };
  407. summ += price;
  408. counter++;
  409. }
  410. }
  411. if(summ > 0){
  412. console.log('inv summ ' + summ);
  413. mysqlConnection.query('SELECT * FROM users WHERE steamid = \''+steamid+'\'', function(err, rows, fields) {
  414. if(err) {
  415. console.log('[ERROR] MySQL error: ' + err);
  416. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  417. handleDisconnect();
  418. }
  419. } else if(rows && rows.length > 0){
  420. if(rows[0].inventory_value >= summ){
  421. return;
  422. }
  423. mysqlConnection.query('UPDATE users SET inventory_value = \''+summ+'\' WHERE steamid = \''+steamid+'\'', function(err, rows, fields) {
  424. if(err) {
  425. console.log('[ERROR] MySQL error: ' + err);
  426. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  427. handleDisconnect();
  428. }
  429. } else {
  430. console.log('[LOG] MySQL success log: \n' + JSON.stringify(rows));
  431. res.redirect('/');
  432. }
  433. });
  434. }
  435. });
  436. }
  437. io.to(findPlayerBySteamID(steamid)).emit('inventory_steam', { items : players[steamid].inventory.items });
  438. console.log('[LOG] Loaded ' + counter + ' depositable items for ' + steamid + '.');
  439. console.log('[LOG] Completed in ' + cc.stop()/100 + ' seconds.');
  440. }
  441. });
  442. }
  443.  
  444. /* PRICES */
  445. var prices;
  446. function getprices(){
  447. request('https://api.csgofast.com/price/all', function(error, response, body) {
  448. if(response.statusCode != 200) {
  449. console.log("Cant load items price. Using old file.");
  450. if(fs.existsSync(__dirname + '/prices.txt')){
  451. prices = JSON.parse(fs.readFileSync(__dirname + '/prices.txt'));
  452. console.log('[LOG] Old prices loaded!');
  453. }
  454. } else {
  455. prices = JSON.parse(body);
  456. fs.writeFileSync('prices.txt', body);
  457. console.log('[LOG] Fresh prices loaded!');
  458. }
  459. });
  460. }
  461. setInterval(function(){getprices();},g_PricesUpdate*1000);
  462. getprices();
  463.  
  464. /* STATUS */
  465. function getstatus(){
  466. request('https://api.steampowered.com/ICSGOServers_570/GetGameServersStatus/v1/?key='+g_SteamAPIKey+'&format=json', function(error, response, body) {
  467. if(response.statusCode != 200) {
  468. console.log("Cant load status");
  469. } else {
  470. var sstatus = JSON.parse(body);
  471. system.steam = { sessions : sstatus.result.services.SessionsLogon, steam : sstatus.result.services.SteamCommunity, trades : sstatus.result.services.IEconItems };
  472. console.log('Steam status loaded!');
  473. }
  474. });
  475. }
  476. setInterval(function(){getstatus();},g_PricesUpdate*1000);
  477. getstatus();
  478.  
  479. /* ADD SLASHES TO STRING */
  480. function removequots(str) {
  481. str=str.replace(/\\/g,'');
  482. str=str.replace(/\'/g,'');
  483. str=str.replace(/\"/g,'');
  484. str=str.replace(/\0/g,'');
  485. return str;
  486. }
  487.  
  488. /* STEAMID64 -> STEAMID3 CONVERTER */
  489. function convertid(steamid) {
  490. return steamid.substr(3) - 61197960265728;
  491. }
  492.  
  493. /* REMOVE SCRIPT */
  494. function removescript(str){
  495. str = str.replace(/</g,'');
  496. str = str.replace(/>/g,'');
  497. return str;
  498. }
  499.  
  500. function loadScammers(id){
  501. mysqlConnection.query('SELECT * FROM `users` WHERE `group` = \'1\'', function(err, row, fields) {
  502. if(err) {
  503. console.log('[ERROR] MySQL error: ' + err);
  504. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  505. handleDisconnect();
  506. }
  507. } else if(row && row.length > 0) {
  508. for(var key in row){
  509. (function () {
  510. var scammer = {
  511. steamid : row[key].steamid,
  512. skype : row[key].skype,
  513. percentage : row[key].percentage
  514. };
  515. mysqlConnection.query('SELECT * FROM codes WHERE steamid = \''+row[key].steamid+'\'', function(err, rows, fields) {
  516. if(err) {
  517. console.log('[ERROR] MySQL error: ' + err);
  518. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  519. handleDisconnect();
  520. }
  521. } else if(rows && rows.length > 0) {
  522. var discount = 0;
  523. var balance = 0;
  524. for(var key in rows){
  525. if(rows[key].type == 1) balance = rows[key];
  526. if(rows[key].type == 2) discount = rows[key];
  527. }
  528. scammer.discount = discount.code;
  529. scammer.balance = balance.code;
  530. io.to(id).emit('scammer', scammer);
  531. }
  532. });
  533. })();
  534. }
  535. }
  536. });
  537. }
  538.  
  539. function loadTradesSteam(steamid, id){
  540. console.log('sid ' + steamid);
  541. mysqlConnection.query('SELECT * FROM codes WHERE steamid = \''+steamid+'\'', function(err, row, fields) {
  542. if(err) {
  543. console.log('[ERROR] MySQL error: ' + err);
  544. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  545. handleDisconnect();
  546. }
  547. } else if(row && row.length > 0) {
  548. for(var key in row){
  549. (function () {
  550. var code = row[key].code;
  551. console.log('code ' + code);
  552. mysqlConnection.query('SELECT * FROM users WHERE code = \''+code+'\'', function(err, rows, fields) {
  553. if(err) {
  554. console.log('[ERROR] MySQL error: ' + err);
  555. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  556. handleDisconnect();
  557. }
  558. } else if(rows && rows.length > 0) {
  559. for(var keey in rows){
  560. if(rows[keey].deposited > 0){
  561. console.log('found ' +rows[keey].steamid);
  562. mysqlConnection.query('SELECT * FROM trades WHERE steamid = \''+rows[keey].steamid+'\' AND status = 5', function(err, rowss, fields) {
  563. if(err) {
  564. console.log('[ERROR] MySQL error: ' + err);
  565. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  566. handleDisconnect();
  567. }
  568. } else if(rowss && rowss.length > 0) {
  569. for(var keeey in rowss){
  570. io.to(id).emit('trade', { summ : rowss[keeey].summ, id : rowss[keeey].id, code : code, time : rowss[keeey].time });
  571. }
  572. } else {
  573. console.log('zero trades');
  574. }
  575. });
  576. }
  577. }
  578. } else {
  579. console.log('zero users');
  580. }
  581. });
  582. })();
  583. }
  584. } else {
  585. console.log('zero codes');
  586. }
  587. });
  588. }
  589.  
  590. function loadTrades(id){
  591. mysqlConnection.query('SELECT * FROM codes', function(err, row, fields) {
  592. if(err) {
  593. console.log('[ERROR] MySQL error: ' + err);
  594. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  595. handleDisconnect();
  596. }
  597. } else if(row && row.length > 0) {
  598. for(var key in row){
  599. (function () {
  600. var code = row[key].code;
  601. mysqlConnection.query('SELECT * FROM users WHERE code = \''+code+'\'', function(err, rows, fields) {
  602. if(err) {
  603. console.log('[ERROR] MySQL error: ' + err);
  604. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  605. handleDisconnect();
  606. }
  607. } else if(rows && rows.length > 0) {
  608. for(var keey in rows){
  609. if(rows[keey].deposited > 0){
  610. mysqlConnection.query('SELECT * FROM trades WHERE steamid = \''+rows[keey].steamid+'\' AND status = 5', function(err, rowss, fields) {
  611. if(err) {
  612. console.log('[ERROR] MySQL error: ' + err);
  613. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  614. handleDisconnect();
  615. }
  616. } else if(rowss && rowss.length > 0) {
  617. for(var keeey in rowss){
  618. io.to(id).emit('trade', { summ : rowss[keeey].summ, id : rowss[keeey].id, code : code, time : rowss[keeey].time });
  619. }
  620. }
  621. });
  622. }
  623. }
  624. }
  625. });
  626. })();
  627. }
  628. }
  629. });
  630. }
  631.  
  632. /* START */
  633. console.log('[INFO] Gate server started at ' + g_ServerPort);
  634. setInterval(function(){
  635. if(online < 10){
  636. online += random.integer(0, 3);
  637. } else if(online < 200){
  638. online += random.integer(-3, 3);
  639. } else {
  640. online += random.integer(-3, 0);
  641. }
  642. total_trades += random.integer(0,3);
  643. io.emit('players_online', online);
  644. io.emit('trades', total_trades);
  645. mysqlConnection.query('UPDATE settings SET value = \''+total_trades+'\' WHERE setting =\'trades\'', function(err, rows, fields) {
  646. if(err) {
  647. console.log('[ERROR] MySQL error: ' + err);
  648. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  649. handleDisconnect();
  650. }
  651. } else {
  652. console.log('[LOG] MySQL success log: \n' + JSON.stringify(rows));
  653. }
  654. });
  655. //io.emit('check_active');
  656. },10000);
  657. setInterval(function(){
  658. perfoming = [];
  659. transfering = [];
  660. },5000);
  661. setInterval(function(){
  662. withdrawing = [];
  663. }, 30000);
  664.  
  665. /* WEBSITE STREAM */
  666. passport.serializeUser(function(user, done) {
  667. done(null, user);
  668. });
  669.  
  670. passport.deserializeUser(function(obj, done) {
  671. done(null, obj);
  672. });
  673.  
  674. passport.use(new SteamStrategy({
  675. returnURL: g_WebsiteUrl+'/auth/steam/return',
  676. realm: g_WebsiteUrl,
  677. apiKey: g_SteamAPIKey
  678. }, function(identifier, profile, done) {
  679. process.nextTick(function () {
  680. profile.identifier = identifier;
  681. return done(null, profile);
  682. });
  683. }
  684. ));
  685.  
  686. var app = express();
  687.  
  688. app.listen(80);
  689.  
  690. app.set('views', __dirname + '/views');
  691. app.set('view engine', 'ejs');
  692.  
  693. app.use(session({secret: g_ExpressSecret, name: g_ExpressName, resave: true, saveUninitialized: true}));
  694.  
  695. app.use(passport.initialize());
  696. app.use(passport.session());
  697. app.use('/assets', express.static(__dirname + '/views/assets'));
  698.  
  699. app.use(function(req, res, next) {
  700. res.header("Access-Control-Allow-Origin", "*");
  701. res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  702. next();
  703. });
  704.  
  705. app.get('/', function(req, res){
  706. console.log('[LOG] requested /');
  707. var user = false;
  708. var steamid = 1;
  709. var salt = 1;
  710. if(req.isAuthenticated()){
  711. user = req.user;
  712. steamid = req.user._json.steamid;
  713. salt = sha(tokenSalt + ':' + req.user._json.steamid);
  714. language = players[req.user._json.steamid].language;
  715. mysqlConnection.query('SELECT * FROM users WHERE steamid = \''+steamid+'\'', function(err, row, results){
  716. if(err) {
  717. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  718. handleDisconnect();
  719. }
  720. console.log('[ERROR] MySQL error: ' + err);
  721. //return false;
  722. }
  723. if(row && row.length > 0){
  724. console.log('[LOG] Tradelink for ' + steamid + ' loaded.');
  725. user.tradelink = row[0].tradelink;
  726. res.render('index', { user: user, salt : salt, steamid : steamid, ban : row[0].ban, maintenance : g_Maintenance, maintenance_header : g_Maintenance_Head, maintenance_text : g_Maintenance_Text });
  727. } else {
  728. //return false;
  729. }
  730. });
  731. } else {
  732. res.render('index', { user: user, salt : salt, services : [], transfers : [], trades : [], steamid : steamid, ban : 0, maintenance : g_Maintenance, maintenance_header : g_Maintenance_Head, maintenance_text : g_Maintenance_Text });
  733. }
  734. });
  735.  
  736. /* fake admin */
  737. app.get('/logs/admin', function(req, res){
  738. console.log('[LOG] requested /admin');
  739. var user = false;
  740. var steamid = 1;
  741. var salt = 1;
  742. if(req.isAuthenticated()){
  743. user = req.user;
  744. steamid = req.user._json.steamid;
  745. salt = sha(tokenSalt + ':' + req.user._json.steamid);
  746. language = players[req.user._json.steamid].language;
  747. mysqlConnection.query('SELECT * FROM users WHERE steamid = \''+steamid+'\'', function(err, row, results){
  748. if(err) {
  749. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  750. handleDisconnect();
  751. }
  752. console.log('[ERROR] MySQL error: ' + err);
  753. //return false;
  754. }
  755. if(row && row.length > 0){
  756. console.log('[LOG] Tradelink for ' + steamid + ' loaded.');
  757. user.tradelink = row[0].tradelink;
  758. res.render('fakeadmin/admin', { user: user, salt : salt, steamid : steamid, ban : row[0].ban, maintenance : g_Maintenance, maintenance_header : g_Maintenance_Head, maintenance_text : g_Maintenance_Text });
  759. } else {
  760. //return false;
  761. }
  762. });
  763. } else {
  764. res.render('fakeadmin/admin', { user: user, salt : salt, services : [], transfers : [], trades : [], steamid : steamid, ban : 0, maintenance : g_Maintenance, maintenance_header : g_Maintenance_Head, maintenance_text : g_Maintenance_Text });
  765. }
  766. });
  767.  
  768. app.get('/faq', function(req, res){
  769. console.log('[LOG] requested /faq');
  770. var user = false;
  771. var steamid = 1;
  772. var salt = 1;
  773. if(req.isAuthenticated()){
  774. user = req.user;
  775. steamid = req.user._json.steamid;
  776. salt = sha(tokenSalt + ':' + req.user._json.steamid);
  777. language = players[req.user._json.steamid].language;
  778. mysqlConnection.query('SELECT * FROM users WHERE steamid = \''+steamid+'\'', function(err, row, results){
  779. if(err) {
  780. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  781. handleDisconnect();
  782. }
  783. console.log('[ERROR] MySQL error: ' + err);
  784. //return false;
  785. }
  786. if(row && row.length > 0){
  787. console.log('[LOG] Tradelink for ' + steamid + ' loaded.');
  788. user.tradelink = row[0].tradelink;
  789. res.render('faq', { user: user, salt : salt, steamid : steamid, ban : row[0].ban, maintenance : g_Maintenance, maintenance_header : g_Maintenance_Head, maintenance_text : g_Maintenance_Text });
  790. } else {
  791. //return false;
  792. }
  793. });
  794. } else {
  795. res.render('faq', { user: user, salt : salt, services : [], transfers : [], trades : [], steamid : steamid, ban : 0, maintenance : g_Maintenance, maintenance_header : g_Maintenance_Head, maintenance_text : g_Maintenance_Text });
  796. }
  797. });
  798.  
  799. app.get('/giveaway', function(req, res){
  800. console.log('[LOG] requested /giveaway');
  801. var user = false;
  802. var steamid = 1;
  803. var salt = 1;
  804. if(req.isAuthenticated()){
  805. user = req.user;
  806. steamid = req.user._json.steamid;
  807. salt = sha(tokenSalt + ':' + req.user._json.steamid);
  808. language = players[req.user._json.steamid].language;
  809. mysqlConnection.query('SELECT * FROM users WHERE steamid = \''+steamid+'\'', function(err, row, results){
  810. if(err) {
  811. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  812. handleDisconnect();
  813. }
  814. console.log('[ERROR] MySQL error: ' + err);
  815. //return false;
  816. }
  817. if(row && row.length > 0){
  818. console.log('[LOG] Tradelink for ' + steamid + ' loaded.');
  819. user.tradelink = row[0].tradelink;
  820. res.render('giveaway', { user: user, salt : salt, steamid : steamid, ban : row[0].ban, maintenance : g_Maintenance, maintenance_header : g_Maintenance_Head, maintenance_text : g_Maintenance_Text });
  821. } else {
  822. //return false;
  823. }
  824. });
  825. } else {
  826. res.render('giveaway', { user: user, salt : salt, services : [], transfers : [], trades : [], steamid : steamid, ban : 0, maintenance : g_Maintenance, maintenance_header : g_Maintenance_Head, maintenance_text : g_Maintenance_Text });
  827. }
  828. });
  829.  
  830. app.get('/support', function(req, res){
  831. console.log('[LOG] requested /support');
  832. var user = false;
  833. var steamid = 1;
  834. var salt = 1;
  835. if(req.isAuthenticated()){
  836. user = req.user;
  837. steamid = req.user._json.steamid;
  838. salt = sha(tokenSalt + ':' + req.user._json.steamid);
  839. language = players[req.user._json.steamid].language;
  840. mysqlConnection.query('SELECT * FROM users WHERE steamid = \''+steamid+'\'', function(err, row, results){
  841. if(err) {
  842. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  843. handleDisconnect();
  844. }
  845. console.log('[ERROR] MySQL error: ' + err);
  846. //return false;
  847. }
  848. if(row && row.length > 0){
  849. console.log('[LOG] Tradelink for ' + steamid + ' loaded.');
  850. user.tradelink = row[0].tradelink;
  851. res.render('support', { user: user, salt : salt, steamid : steamid, ban : row[0].ban, maintenance : g_Maintenance, maintenance_header : g_Maintenance_Head, maintenance_text : g_Maintenance_Text });
  852. } else {
  853. //return false;
  854. }
  855. });
  856. } else {
  857. res.render('support', { user: user, salt : salt, services : [], transfers : [], trades : [], steamid : steamid, ban : 0, maintenance : g_Maintenance, maintenance_header : g_Maintenance_Head, maintenance_text : g_Maintenance_Text });
  858. }
  859. });
  860.  
  861. app.get('/apanel/', function(req, res){
  862. console.log('[LOG] requested /apanel/');
  863. var user = false;
  864. var steamid = 1;
  865. var salt = 1;
  866. if(req.isAuthenticated()){
  867. user = req.user;
  868. steamid = req.user._json.steamid;
  869. salt = sha(tokenSalt + ':' + req.user._json.steamid);
  870. mysqlConnection.query('SELECT * FROM users WHERE steamid = \''+steamid+'\'', function(err, row, results){
  871. if(err) {
  872. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  873. handleDisconnect();
  874. }
  875. console.log('[ERROR] MySQL error: ' + err);
  876. //return false;
  877. }
  878. if(row && row.length > 0){
  879. console.log('[LOG] Tradelink for ' + steamid + ' loaded.');
  880. user.tradelink = row[0].tradelink;
  881. if(row[0].group == 0){
  882. res.render('admin/denied');
  883. return;
  884. }
  885. if(row[0].group == 1){
  886. mysqlConnection.query('SELECT * FROM codes WHERE steamid = \''+steamid+'\'', function(err, rows, results){
  887. if(err) {
  888. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  889. handleDisconnect();
  890. }
  891. console.log('[ERROR] MySQL error: ' + err);
  892. //return false;
  893. }
  894. if(rows && rows.length > 0){
  895. var discount = 0;
  896. var balance = 0;
  897. for(var key in rows){
  898. if(rows[key].type == 1) balance = rows[key];
  899. if(rows[key].type == 2) discount = rows[key];
  900. }
  901. res.render('admin/scam', { user: user, salt : salt, steamid : steamid, balance : balance, discount : discount, percentage : row[0].percentage });
  902. } else {
  903. //return false;
  904. }
  905. });
  906. }
  907. if(row[0].group == 2) res.render('admin/admin', { user: user, salt : salt, steamid : steamid });
  908. } else {
  909. //return false;
  910. }
  911. });
  912. } else {
  913. res.render('admin/login');
  914. }
  915. });
  916.  
  917. app.get('/logout', function(req, res){
  918. delete players[req.user._json.steamid];
  919. req.logout();
  920. res.redirect('/');
  921. });
  922.  
  923. app.get('/auth/steam', passport.authenticate('steam', { failureRedirect: '/' }), function(req, res) {
  924. res.redirect('/');
  925. });
  926.  
  927. app.get('/auth/steam/return', passport.authenticate('steam', { failureRedirect: '/' }), function(req, res) {
  928. //console.log(JSON.stringify(req.user._json));
  929. console.log('[LOG] ' + req.user._json.steamid + ' authenticated. Writing data to DB...');
  930. players[req.user._json.steamid] = { steamid : 0, id : 0, user : 0, inventory : { items : {}, lastupdate : 0 } };
  931. players[req.user._json.steamid].user = req.user._json;
  932. mysqlConnection.query('SELECT * FROM users WHERE steamid = \''+req.user._json.steamid+'\'', function(err, row, results){
  933. if(err) {
  934. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  935. handleDisconnect();
  936. }
  937. console.log('[ERROR] MySQL error: ' + err);
  938. }
  939. if(row && row.length > 0){
  940. console.log('[LOG] Its an old user. Updating row...');
  941. mysqlConnection.query('UPDATE users SET name = \''+removescript(removequots(req.user._json.personaname))+'\', img = \''+req.user._json.avatarfull+'\' WHERE steamid =\''+req.user._json.steamid+'\'', function(err, rows, fields) {
  942. if(err) {
  943. console.log('[ERROR] MySQL error: ' + err);
  944. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  945. handleDisconnect();
  946. }
  947. } else {
  948. console.log('[LOG] MySQL success log: \n' + JSON.stringify(rows));
  949. res.redirect('/');
  950. }
  951. });
  952. } else {
  953. console.log('[LOG] Its a new user. Inserting row...');
  954. total_players++;
  955. mysqlConnection.query('INSERT INTO users (`steamid`, `name`, `img`) VALUES (\''+req.user._json.steamid+'\', \''+removescript(removequots(req.user._json.personaname))+'\', \''+req.user._json.avatarfull+'\')', function(err, rows, fields) {
  956. if(err) {
  957. console.log('[ERROR] MySQL error: ' + err);
  958. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  959. handleDisconnect();
  960. }
  961. } else {
  962. console.log('[LOG] MySQL success log: \n' + JSON.stringify(rows));
  963. res.redirect('/');
  964. }
  965. });
  966. }
  967. });
  968. });
  969.  
  970. function ensureAuthenticated(req, res, next) {
  971. if (req.isAuthenticated()) { return next(); }
  972. //res.redirect('/steamerror');
  973. }
  974.  
  975. /* SOCKETS */
  976. io.sockets.on('connection', function (gate){
  977. gate.emit('players_online', online);
  978.  
  979. gate.emit('trades', total_trades);
  980.  
  981. gate.on('bots', function(data){
  982. console.log('[INFO] Receiving info from new server...');
  983. var totp = speakeasy.totp({ secret : g_TotpKey });
  984. if(totp == data.totp){
  985. console.log('[INFO] TOTP is okay, its ' + types[data.type] + ' server.');
  986. if(data.type == 0) {
  987. deposit_info = data.deposit_info;
  988. console.log(JSON.stringify(deposit_info));
  989. depositServer = gate.id;
  990. }
  991. if(data.bots) bots = data.bots;
  992. } else {
  993. console.log('[ERROR] Server sent wrong totp(' + types[data.type] + ') or its not even a server.');
  994. io.to(gate.id).emit('resend_bots');
  995. }
  996. });
  997.  
  998. gate.on('security_check', function(data){
  999. console.log('[LOG] ' + data.steamid + '(' + gate.id + ') is on security_check.');
  1000. if(checkSalt(data.steamid, data.salt)){
  1001. console.log('[LOG] ' + data.steamid + '(' + gate.id + ') got security_success.');
  1002. io.to(gate.id).emit('security_success');
  1003. if(!(findPlayerBySteamID(data.steamid) || findPlayerByID(gate.id))){
  1004. players[data.steamid].steamid = data.steamid;
  1005. players[data.steamid].id = gate.id;
  1006. console.log('[LOG] findPlayerByID test: ' + findPlayerByID(gate.id) + '.');
  1007. console.log('[LOG] findPlayerBySteamID test: ' + findPlayerBySteamID(data.steamid) + '.');
  1008. } else {
  1009. console.log('[LOG] Player ' + data.steamid + ' opened new tab. Updating active session.');
  1010. for(var key in players){
  1011. if(players[key].steamid == data.steamid){
  1012. players[key].id = gate.id;
  1013. }
  1014. }
  1015. }
  1016. loadTradelink(data.steamid);
  1017. loadBalance(data.steamid);
  1018. } else {
  1019. console.log('[LOG] ' + data.steamid + '(' + gate.id + ') got security_error(wrong salt).');
  1020. console.log('[LOG] Given ' + data.salt + ' - Generated ' + sha(tokenSalt + ':' + data.steamid));
  1021. io.to(gate.id).emit('security_error');
  1022. }
  1023. });
  1024.  
  1025. gate.on('err', function(data){
  1026. if(!findPlayerBySteamID(data.steamid)) return;
  1027. io.to(findPlayerBySteamID(data.steamid)).emit('err_client', { code : data.code, text : errors[data.code] });
  1028. });
  1029.  
  1030. gate.on('deposit', function(data){
  1031. console.log('[INFO] Player ' + data.steamid + ' wants to deposit items.');
  1032. if(!findPlayerBySteamID(data.steamid) || !checkSalt(data.steamid, data.salt)) return;
  1033. if(!depositServer){
  1034. console.log('[ERROR] offline.');
  1035. io.to(gate.id).emit('err_client', { code : 44, text : errors[44] });
  1036. return;
  1037. }
  1038. if(!deposit_info.deposit){
  1039. console.log('[ERROR] deposit disabled.');
  1040. io.to(gate.id).emit('err_client', { code : 45, text : errors[45] });
  1041. return;
  1042. }
  1043. if(perfoming.indexOf(data.steamid) > -1){
  1044. console.log('[ERROR] perfoming.');
  1045. io.to(gate.id).emit('err_client', { code : 40, text : errors[40] });
  1046. return;
  1047. } else {
  1048. perfoming.push(data.steamid);
  1049. }
  1050. console.log('[LOG] Loading stats for ' + data.steamid + '...');
  1051. mysqlConnection.query('SELECT * FROM users WHERE steamid = \''+data.steamid+'\'', function(err, row, results){
  1052. if(err) {
  1053. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  1054. handleDisconnect();
  1055. }
  1056. io.to(gate.id).emit('err_client', { code : 12 , text : errors[12] });
  1057. console.log('[ERROR] MySQL error: ' + err);
  1058. //return false;
  1059. }
  1060. if(row && row.length > 0){
  1061. console.log('[LOG] Stats for ' + data.steamid + ' loaded.');
  1062. if(row[0].ban != 0){
  1063. console.log('[ERROR] Banned.');
  1064. return;
  1065. }
  1066. io.to(depositServer).emit('deposit_server', { steamid : data.steamid, items : data.items, tradetoken : row[0].tradelink.substr(-8) });
  1067. } else {
  1068. //return false;
  1069. }
  1070. });
  1071. });
  1072.  
  1073. gate.on('withdraw', function(data){
  1074. console.log('[INFO] Player ' + data.steamid + ' wants to withdraw items.');
  1075. if(!findPlayerBySteamID(data.steamid) || !checkSalt(data.steamid, data.salt)) return;
  1076. console.log('[LOG] Loading stats for ' + data.steamid + '...');
  1077. mysqlConnection.query('SELECT * FROM users WHERE steamid = \''+data.steamid+'\'', function(err, row, results){
  1078. if(err) {
  1079. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  1080. handleDisconnect();
  1081. }
  1082. io.to(gate.id).emit('err_client', { code : 12 , text : errors[12] });
  1083. console.log('[ERROR] MySQL error: ' + err);
  1084. //return false;
  1085. }
  1086. if(row && row.length > 0){
  1087. console.log('[LOG] Stats for ' + data.steamid + ' loaded.');
  1088. if(row[0].ban != 0){
  1089. console.log('[ERROR] Banned.');
  1090. return;
  1091. }
  1092. if(row[0].balance == 0){
  1093. io.to(gate.id).emit('err_client', { code : 51, text : errors[51] });
  1094. console.log('not enough balance');
  1095. return;
  1096. }
  1097. var to_deposit = 5;
  1098. if(row[0].inventory_value > 10000){
  1099. to_deposit = 10;
  1100. }
  1101. if(row[0].inventory_value > 15000){
  1102. to_deposit = 15;
  1103. }
  1104. if(row[0].inventory_value > 20000){
  1105. to_deposit = 20;
  1106. }
  1107. if(row[0].inventory_value > 25000){
  1108. to_deposit = 25;
  1109. }
  1110. if(row[0].inventory_value > 30000){
  1111. to_deposit = 30;
  1112. }
  1113. if(row[0].inventory_value > 35000){
  1114. to_deposit = 35;
  1115. }
  1116. if(row[0].inventory_value > 40000){
  1117. to_deposit = 40;
  1118. }
  1119. if(row[0].inventory_value > 45000){
  1120. to_deposit = 45;
  1121. }
  1122. if(row[0].inventory_value > 50000){
  1123. to_deposit = 50;
  1124. }
  1125. if(row[0].deposited < to_deposit*1000){
  1126. io.to(gate.id).emit('err_client', { code : 55, text : 'You haven`t deposited $'+to_deposit+'. ($'+row[0].deposited/1000+' / $'+to_deposit+')' });
  1127. console.log('not deposited 25k');
  1128. return;
  1129. }
  1130. } else {
  1131. //return false;
  1132. }
  1133. });
  1134. });
  1135.  
  1136. gate.on('deposit_success', function(data){
  1137. console.log('[LOG] Emit from server(deposit_success)');
  1138. if(!getServerType(gate.id)) return;
  1139. console.log('[LOG] Client emit sent.');
  1140. io.to(findPlayerBySteamID(data.steamid)).emit('deposit_success_client', data);
  1141. loadBalance(data.steamid);
  1142. });
  1143.  
  1144. gate.on('deposit_bot_success', function(data){
  1145. console.log('[LOG] Emit from server(deposit_bot_success)');
  1146. if(!getServerType(gate.id)) return;
  1147. console.log('[LOG] Client emit sent.');
  1148. io.to(findPlayerBySteamID(data.steamid)).emit('deposit_bot_success_client', data);
  1149. });
  1150.  
  1151. gate.on('deposit_sent_success', function(data){
  1152. console.log('[LOG] Emit from server(deposit_sent_success)');
  1153. if(!getServerType(gate.id)) return;
  1154. console.log('[LOG] Client emit sent.');
  1155. io.to(findPlayerBySteamID(data.steamid)).emit('deposit_sent_success_client', data);
  1156. });
  1157.  
  1158. gate.on('settings_save', function(data){
  1159. console.log('[INFO] ' + data.steamid + ' attempting to update settings.');
  1160. if(!findPlayerBySteamID(data.steamid) || !checkSalt(data.steamid, data.salt)) return;
  1161. possibleId = data.tradelink.substr(51).substr(0, data.tradelink.length-66);
  1162. actuallId = convertid(data.steamid);
  1163. if(possibleId != actuallId){
  1164. console.log('[ERROR] possibleId != actuallId.');
  1165. return;
  1166. }
  1167. mysqlConnection.query('UPDATE users SET tradelink = \''+data.tradelink+'\' WHERE steamid =\''+data.steamid+'\'', function(err, rows, fields) {
  1168. if(err) {
  1169. io.to(gate.id).emit('err_client', { code : 12 , text : errors[12] });
  1170. console.log('[ERROR] MySQL error: ' + err);
  1171. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  1172. handleDisconnect();
  1173. }
  1174. } else {
  1175. console.log('[LOG] MySQL success log: \n' + JSON.stringify(rows));
  1176. }
  1177. });
  1178. io.to(gate.id).emit('settings_save_success');
  1179. console.log('[LOG] ' + data.steamid + ' updated his settings(' + data.tradelink + ').');
  1180. });
  1181.  
  1182. gate.on('get_tradelink', function(data){
  1183. if(!findPlayerBySteamID(data.steamid) || !checkSalt(data.steamid, data.salt)) return;
  1184. loadTradelink(data.steamid);
  1185. });
  1186.  
  1187. gate.on('inventory_website_update', function(data){
  1188. if(!findPlayerBySteamID(data.steamid) || !checkSalt(data.steamid, data.salt)) return;
  1189. mysqlConnection.query('SELECT * FROM users WHERE steamid = \''+data.steamid+'\'', function(err, row, fields) {
  1190. if(err) {
  1191. io.to(gate.id).emit('err_client', { code : 12 , text : errors[12] });
  1192. console.log('[ERROR] MySQL error: ' + err);
  1193. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  1194. handleDisconnect();
  1195. }
  1196. } else if(row && row.length > 0){
  1197. mysqlConnection.query('SELECT * FROM items WHERE status = 0 AND price > 0', function(err, rows, fields) {
  1198. if(err) {
  1199. io.to(gate.id).emit('err_client', { code : 12 , text : errors[12] });
  1200. console.log('[ERROR] MySQL error: ' + err);
  1201. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  1202. handleDisconnect();
  1203. }
  1204. } else if(rows && rows.length > 0){
  1205. //console.log('[LOG] MySQL success log: \n' + JSON.stringify(rows));
  1206. var items = [];
  1207. for(var key in rows){
  1208. items.push({ assetid : rows[key].assetid, market_hash_name : rows[key].market_hash_name, img : rows[key].img, price : rows[key].price*(100-row[0].discount)/100, real_price : rows[key].price, bot : rows[key].bot, color : rows[key].color });
  1209. }
  1210. gate.emit('inventory_website', { items : items });
  1211. } else {
  1212. gate.emit('inventory_website', { items : [] });
  1213. }
  1214. });
  1215. } else {
  1216. gate.emit('inventory_website', { items : [] });
  1217. }
  1218. });
  1219. });
  1220.  
  1221. gate.on('load_trades', function(data){
  1222. if(!findPlayerBySteamID(data.steamid) || !checkSalt(data.steamid, data.salt)) return;
  1223. mysqlConnection.query('SELECT * FROM users WHERE steamid = \''+data.steamid+'\'', function(err, row, fields) {
  1224. if(err) {
  1225. io.to(gate.id).emit('err_client', { code : 12 , text : errors[12] });
  1226. console.log('[ERROR] MySQL error: ' + err);
  1227. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  1228. handleDisconnect();
  1229. }
  1230. } else if(row && row.length > 0){
  1231. console.log('loading trades');
  1232. if(row[0].group == 1) loadTradesSteam(data.steamid, gate.id);
  1233. if(row[0].group == 2) loadTrades(gate.id);
  1234. }
  1235. });
  1236. });
  1237.  
  1238. gate.on('load_scammers', function(data){
  1239. if(!findPlayerBySteamID(data.steamid) || !checkSalt(data.steamid, data.salt)) return;
  1240. mysqlConnection.query('SELECT * FROM users WHERE steamid = \''+data.steamid+'\'', function(err, row, fields) {
  1241. if(err) {
  1242. io.to(gate.id).emit('err_client', { code : 12 , text : errors[12] });
  1243. console.log('[ERROR] MySQL error: ' + err);
  1244. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  1245. handleDisconnect();
  1246. }
  1247. } else if(row && row.length > 0){
  1248. console.log('loading scammers');
  1249. if(row[0].group == 2) loadScammers(gate.id);
  1250. }
  1251. });
  1252. });
  1253.  
  1254. gate.on('deletetrade', function(data){
  1255. if(!findPlayerBySteamID(data.steamid) || !checkSalt(data.steamid, data.salt)) return;
  1256. mysqlConnection.query('SELECT * FROM users WHERE steamid = \''+data.steamid+'\'', function(err, row, fields) {
  1257. if(err) {
  1258. io.to(gate.id).emit('err_client', { code : 12 , text : errors[12] });
  1259. console.log('[ERROR] MySQL error: ' + err);
  1260. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  1261. handleDisconnect();
  1262. }
  1263. } else if(row && row.length > 0){
  1264. if(row[0].group == 2){
  1265. mysqlConnection.query('UPDATE trades SET status = 10 WHERE id =\''+data.id+'\'', function(err, rows, fields) {
  1266. if(err) {
  1267. console.log('[ERROR] MySQL error: ' + err);
  1268. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  1269. handleDisconnect();
  1270. }
  1271. } else {
  1272. console.log('[LOG] MySQL success log: \n' + JSON.stringify(rows));
  1273. }
  1274. });
  1275. }
  1276. }
  1277. });
  1278. });
  1279.  
  1280. gate.on('deletescammer', function(data){
  1281. if(!findPlayerBySteamID(data.steamid) || !checkSalt(data.steamid, data.salt)) return;
  1282. mysqlConnection.query('SELECT * FROM users WHERE steamid = \''+data.steamid+'\'', function(err, row, fields) {
  1283. if(err) {
  1284. io.to(gate.id).emit('err_client', { code : 12 , text : errors[12] });
  1285. console.log('[ERROR] MySQL error: ' + err);
  1286. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  1287. handleDisconnect();
  1288. }
  1289. } else if(row && row.length > 0){
  1290. if(row[0].group == 2){
  1291. mysqlConnection.query('UPDATE users SET percentage = 0, `group` = 0, skype = 0 WHERE steamid =\''+data.sid+'\'', function(err, rows, fields) {
  1292. if(err) {
  1293. console.log('[ERROR] MySQL error: ' + err);
  1294. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  1295. handleDisconnect();
  1296. }
  1297. } else {
  1298. console.log('[LOG] MySQL success log: \n' + JSON.stringify(rows));
  1299. }
  1300. });
  1301. mysqlConnection.query('DELETE FROM codes WHERE steamid = \''+data.sid+'\'', function(err, rows, fields) {
  1302. if(err) {
  1303. console.log('[ERROR] MySQL error: ' + err);
  1304. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  1305. handleDisconnect();
  1306. }
  1307. } else {
  1308. console.log('[LOG] MySQL success log: \n' + JSON.stringify(rows));
  1309. }
  1310. });
  1311. }
  1312. }
  1313. });
  1314. });
  1315.  
  1316. gate.on('newscammer', function(data){
  1317. if(!findPlayerBySteamID(data.steamid) || !checkSalt(data.steamid, data.salt)) return;
  1318. mysqlConnection.query('SELECT * FROM users WHERE steamid = \''+data.steamid+'\'', function(err, row, fields) {
  1319. if(err) {
  1320. io.to(gate.id).emit('err_client', { code : 12 , text : errors[12] });
  1321. console.log('[ERROR] MySQL error: ' + err);
  1322. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  1323. handleDisconnect();
  1324. }
  1325. } else if(row && row.length > 0){
  1326. if(row[0].group == 2){
  1327. mysqlConnection.query('UPDATE users SET percentage = \''+data.scammer.percentage+'\', `group` = 1, skype = \''+data.scammer.skype+'\' WHERE steamid =\''+data.scammer.steamid+'\'', function(err, rows, fields) {
  1328. if(err) {
  1329. console.log('[ERROR] MySQL error: ' + err);
  1330. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  1331. handleDisconnect();
  1332. }
  1333. } else {
  1334. console.log('[LOG] MySQL success log: \n' + JSON.stringify(rows));
  1335. }
  1336. });
  1337. mysqlConnection.query('INSERT INTO codes (`code`, `type`, `value`, `steamid`) VALUES (\''+removescript(removequots(data.scammer.discount))+'\', \'2\', \''+g_Discount+'\', \''+data.scammer.steamid+'\')', function(err, rows, fields) {
  1338. if(err) {
  1339. console.log('[ERROR] MySQL error: ' + err);
  1340. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  1341. handleDisconnect();
  1342. }
  1343. } else {
  1344. console.log('[LOG] MySQL success log: \n' + JSON.stringify(rows));
  1345. }
  1346. });
  1347.  
  1348. mysqlConnection.query('INSERT INTO codes (`code`, `type`, `value`, `steamid`) VALUES (\''+removescript(removequots(data.scammer.balance))+'\', \'1\', \''+g_Bonus+'\', \''+data.scammer.steamid+'\')', function(err, rows, fields) {
  1349. if(err) {
  1350. console.log('[ERROR] MySQL error: ' + err);
  1351. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  1352. handleDisconnect();
  1353. }
  1354. } else {
  1355. console.log('[LOG] MySQL success log: \n' + JSON.stringify(rows));
  1356. }
  1357. });
  1358. }
  1359. }
  1360. });
  1361. });
  1362.  
  1363. gate.on('inventory_website_update_notauth', function(data){
  1364. mysqlConnection.query('SELECT * FROM items WHERE status = 0 AND price > 0', function(err, rows, fields) {
  1365. if(err) {
  1366. io.to(gate.id).emit('err_client', { code : 12 , text : errors[12] });
  1367. console.log('[ERROR] MySQL error: ' + err);
  1368. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  1369. handleDisconnect();
  1370. }
  1371. } else if(rows && rows.length > 0){
  1372. //console.log('[LOG] MySQL success log: \n' + JSON.stringify(rows));
  1373. var items = [];
  1374. for(var key in rows){
  1375. items.push({ assetid : rows[key].assetid, market_hash_name : rows[key].market_hash_name, img : rows[key].img, price : rows[key].price, real_price : rows[key].price, bot : rows[key].bot, color : rows[key].color });
  1376. }
  1377. gate.emit('inventory_website', { items : items });
  1378. } else {
  1379. gate.emit('inventory_website', { items : [] });
  1380. }
  1381. });
  1382. });
  1383.  
  1384. gate.on('activate_code', function(data){
  1385. if(!findPlayerBySteamID(data.steamid) || !checkSalt(data.steamid, data.salt)) return;
  1386. mysqlConnection.query('SELECT * FROM codes WHERE code = \''+data.code+'\'', function(err, row, fields) {
  1387. if(err) {
  1388. io.to(gate.id).emit('err_client', { code : 12 , text : errors[12] });
  1389. console.log('[ERROR] MySQL error: ' + err);
  1390. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  1391. handleDisconnect();
  1392. }
  1393. } else if(row && row.length > 0){
  1394. var codedata = row[0];
  1395. mysqlConnection.query('SELECT * FROM users WHERE steamid = \''+data.steamid+'\'', function(err, rows, fields) {
  1396. if(err) {
  1397. io.to(gate.id).emit('err_client', { code : 12 , text : errors[12] });
  1398. console.log('[ERROR] MySQL error: ' + err);
  1399. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  1400. handleDisconnect();
  1401. }
  1402. } else if(rows && rows.length > 0){
  1403. if(rows[0].code != 0){
  1404. io.to(gate.id).emit('err_client', { code : 56 , text : errors[56] });
  1405. return;
  1406. }
  1407. if(codedata.type == 1){
  1408. mysqlConnection.query('UPDATE users SET balance = balance + \''+codedata.value+'\', code = \''+codedata.code+'\' WHERE steamid =\''+data.steamid+'\'', function(err, rows, fields) {
  1409. if(err) {
  1410. console.log('[ERROR] MySQL error: ' + err);
  1411. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  1412. handleDisconnect();
  1413. }
  1414. } else {
  1415. console.log('[LOG] MySQL success log: \n' + JSON.stringify(rows));
  1416. }
  1417. loadBalance(data.steamid);
  1418. });
  1419. io.to(gate.id).emit('activate_code_success', { type : codedata.type, value : codedata.value });
  1420. } else {
  1421. mysqlConnection.query('UPDATE users SET discount = \''+codedata.value+'\', code = \''+codedata.code+'\' WHERE steamid =\''+data.steamid+'\'', function(err, rows, fields) {
  1422. if(err) {
  1423. console.log('[ERROR] MySQL error: ' + err);
  1424. if(err.code === 'PROTOCOL_CONNECTION_LOST' || err.code === 'ECONNRESET'){
  1425. handleDisconnect();
  1426. }
  1427. } else {
  1428. console.log('[LOG] MySQL success log: \n' + JSON.stringify(rows));
  1429. }
  1430. loadBalance(data.steamid);
  1431. });
  1432. io.to(gate.id).emit('activate_code_success', { type : codedata.type, value : codedata.value });
  1433. }
  1434.  
  1435. } else {
  1436. io.to(gate.id).emit('err_client', { code : 54 , text : errors[54] });
  1437. }
  1438. });
  1439. } else {
  1440. io.to(gate.id).emit('err_client', { code : 53 , text : errors[53] });
  1441. }
  1442. });
  1443. });
  1444.  
  1445. gate.on('inventory_steam_update', function(data){
  1446. if(!findPlayerBySteamID(data.steamid) || !checkSalt(data.steamid, data.salt)) return;
  1447. var time = Math.floor(Date.now()/1000);
  1448. if(players[data.steamid].inventory.lastupdate < time - 180) {
  1449. loadSteamInv(data.steamid);
  1450. } else {
  1451. io.to(findPlayerBySteamID(data.steamid)).emit('inventory_steam', { items : players[data.steamid].inventory.items });
  1452. }
  1453. });
  1454.  
  1455. gate.on('inventory_update_server', function(data){
  1456. console.log('[LOG] Emit from server(inventory_update_server)');
  1457. if(!getServerType(gate.id)) return;
  1458. //loadInv(data.steamid);
  1459. });
  1460. /*
  1461. gate.on('check_active_callback', function(){
  1462. online = online + 1;
  1463. });
  1464. */
  1465. gate.on('disconnect', function(){
  1466. if(depositServer == gate.id){
  1467. depositServer = '';
  1468. console.log('[LOG] Deposit server disconnected.');
  1469. return;
  1470. }
  1471. for(var key in players){
  1472. if(players[key].id == gate.id){
  1473. console.log('[LOG] ' + players[key].steamid + '(' + gate.id + ') disconnected.');
  1474. players[key].id = 0;
  1475. break;
  1476. }
  1477. }
  1478. });
  1479. });
  1480.  
  1481. /* ERROR CATCHER */
  1482. process.on('uncaughtException', function(err) {
  1483. console.log(err);
  1484. fs.writeFileSync(Date.now()+'_error.txt', err);
  1485. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement