Guest User

Untitled

a guest
Mar 14th, 2018
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 101.25 KB | None | 0 0
  1. var mysql = require('mysql');
  2. var log4js = require('log4js');
  3. var io = require('socket.io')(8080);
  4. var request = require('request');
  5. var fs = require('fs');
  6. var md5 = require('md5');
  7. var sha256 = require('sha256');
  8. var math = require('mathjs');
  9. var config = require('./config.json');
  10. var logger = log4js.getLogger();
  11. var crypto = require('crypto');
  12.  
  13. updateLog();
  14. function updateLog() {
  15. logger.debug('New log...');
  16.  
  17. log4js.configure({
  18. appenders: {
  19. out:{ type: 'console' },
  20. app:{ type: 'file', filename: 'logs/site/site_'+time()+'.log' }
  21. },
  22. categories: {
  23. default: { appenders: [ 'out', 'app' ], level: 'all' }
  24. }
  25. });
  26. setTimeout(function(){
  27. updateLog();
  28. }, 24 * 3600 * 1000);
  29. }
  30.  
  31. var pool = mysql.createPool({
  32. database: config.database["database"],
  33. host: config.database["host"],
  34. user: config.database["user"],
  35. password: config.database["password"]
  36. });
  37.  
  38.  
  39. process.on('uncaughtException', function (err) {
  40. logger.trace('Strange error');
  41. logger.debug(err);
  42. });
  43.  
  44.  
  45.  
  46. //FOR ALL GAMES
  47. var canPlayersBet = 1;
  48. var amountGiveaway = 1000;
  49.  
  50. var maxbet = config.optionsSite["maxbet"];
  51. var minbet = config.optionsSite["minbet"];
  52.  
  53. var needLevelToSendCoins = config.optionsSite["needLevelToSendCoins"]; //For send coins
  54. var delayLoadPrices = config.optionsSite["delayLoadPrices"] //in Hours
  55. var xpPerLevel = config.optionsSite["xpPerLevel"];
  56.  
  57. var groupId = config.optionsSite["groupId"];
  58. var coinGroupR = config.optionsSite["coinGroupR"];
  59. var coinNameR = config.optionsSite["coinNameR"];
  60. var coinCodeR = config.optionsSite["coinCodeR"];
  61. var coinFriendR = config.optionsSite["coinFriendR"];
  62. var AppID = config.optionsSite["AppID"];
  63. var ApiKey = config.optionsSite["ApiKey"];
  64.  
  65. var nameForGame = config.optionsSite["nameForGame"];
  66. var nameSite = config.optionsSite["nameSite"];
  67.  
  68. var timeGiveaway = config.optionsSite["timeGiveaway"]; //hours
  69.  
  70. var timeJPot = config.optionsSite["timeJPot"]; //time wait round
  71.  
  72. var timerRoulette = config.optionsSite["timerRoulette"]; //seconds
  73.  
  74. var maxCoinflips = config.optionsSite["maxCoinflips"]; //per user
  75.  
  76. var waitStartingCrash = config.optionsSite["waitStartingCrash"]; //seconds
  77.  
  78. /* Bot Section*/
  79. var TimesForBotsToBet = 20;
  80. var CurrentTimesForBotsToBet = 0;
  81. var IntervalBetuireBoti;
  82. var IntervalulLaBoti = 1;
  83. var IntervalDeBetuireBoti = IntervalulLaBoti*5000;
  84. var BotsStarted = 0;
  85.  
  86.  
  87. var TimeOfBotsCHHH = 60;
  88. var TimeOfBotsChatting = TimeOfBotsCHHH*1000;
  89.  
  90. var BotBetName;
  91. var BotBetAvatar;
  92.  
  93.  
  94. /* CONNECT TO SOCKET */
  95. io.on('connection', function(socket) {
  96. var user = false;
  97. socket.on('hash', function(hash) {
  98. query('SELECT `steamid`, `rank`, `balance`, `name`, `avatar`, `banPlay` FROM `users` WHERE `hash` = '+pool.escape(hash), function(err, row) {
  99. if((err) || (!row.length)){
  100. return socket.disconnect();
  101. }else{
  102. user = row[0];
  103. users[user.steamid] = {
  104. socket: socket.id,
  105. balance: parseInt(user.balance)
  106. }
  107. socket.join(user.steamid);
  108. timesFlooding[user.steamid] = 0;
  109.  
  110. //100 ROLLS ROULETTE
  111. socket.emit('message', {
  112. type: '100rolls',
  113. rolls: historyRolls100
  114. });
  115.  
  116.  
  117. //FIRST DATES
  118. var sendRHash;
  119. if(roundedHash == null) {
  120. sendRHash = '0';
  121. }else {
  122. sendRHash = roundedHash;
  123. }
  124.  
  125. socket.emit('message', {
  126. type: 'hello',
  127. count: timer-wait,
  128. maxbet: maxbet,
  129. minbet: minbet,
  130. roundedHash: sendRHash,
  131. rolls: historyRolls,
  132. balance: user.balance,
  133. rank: user.rank,
  134. user: user.steamid
  135. });
  136.  
  137. //ROULETTE
  138. if(currentBets.length > 0){
  139. currentBets.forEach(function(itm) {
  140. socket.emit('message', {
  141. type: 'bet',
  142. bet: {
  143. amount: itm.amount,
  144. betid: itm.betid,
  145. icon: itm.icon,
  146. lower: itm.lower,
  147. upper: itm.upper,
  148. name: itm.name,
  149. user: itm.user,
  150. level: itm.level,
  151. won: null
  152. },
  153. sums: {
  154. 0: currentSums['0-0'],
  155. 1: currentSums['1-7'],
  156. 2: currentSums['8-14']
  157. }
  158. });
  159. });
  160. }
  161.  
  162. //MESSAGES
  163. if(msgChatHist.length > 0){
  164. msgChatHist.forEach(function(itm) {
  165. socket.emit('message', {
  166. type: 'chat',
  167. msg: itm.msg,
  168. name: itm.name,
  169. icon: itm.icon,
  170. user: itm.user,
  171. rank: itm.rank,
  172. lang: itm.lang,
  173. hide: itm.hide,
  174. level: itm.level,
  175. id: itm.id,
  176. time: itm.time
  177. });
  178. });
  179. }
  180.  
  181. //USERS ONLINE
  182. io.sockets.emit('message', {
  183. type: 'logins',
  184. count: Object.size(io.sockets.connected)
  185. });
  186.  
  187. //CRASH
  188. if(crashState == 'STARTED'){
  189. socket.emit('message', {
  190. type: 'startedCrash',
  191. elapsed: new Date().getTime() - startCrashTime
  192. });
  193.  
  194. if(betsCrash.length > 0){
  195. betsCrash.forEach(function(bet){
  196. socket.emit('message', {
  197. type: 'crbet',
  198. bet: {
  199. id: bet.id,
  200. amount: bet.amount,
  201. icon: bet.icon,
  202. name: bet.name,
  203. level: bet.level
  204. }
  205. });
  206.  
  207. if(usersCrash[bet.user] !== undefined){
  208. if(usersCrash[bet.user]['cashedOut'] == true) {
  209. io.sockets.emit('message', {
  210. type: 'betCrashWin',
  211. id: bet.id,
  212. cashout: usersCrash[bet.user]['autoCashout'],
  213. profit: usersCrash[bet.user]['profit']
  214. });
  215. }
  216. }
  217. });
  218. }
  219. } else if(crashState == 'ENDED'){
  220. socket.emit('message', {
  221. type: 'crashed',
  222. number: crashAt,
  223. time: endedCrashTime
  224. });
  225. }
  226.  
  227. if(usersCrash[user.steamid] !== undefined){
  228. var win = usersCrash[user.steamid]['amount'] + usersCrash[user.steamid]['profit'];
  229. socket.emit('message', {
  230. type: 'btnCrashWin',
  231. amount: win
  232. });
  233. }
  234.  
  235.  
  236. //MINES
  237. if(gamesMines[user.steamid] !== undefined && !gamesMines[user.steamid]['lose'] && !gamesMines[user.steamid]['cashout'] && gamesMines[user.steamid]['bombsWin'].length > 0){
  238. var xSum = 0;
  239. gamesMines[user.steamid]['bombsWin'].forEach(function(itm) {
  240. socket.emit('message', {
  241. type: 'getBomb',
  242. mtype: 'win',
  243. buttons: itm,
  244. stake: gamesMines[user.steamid]['amountWin'],
  245. next: gamesMines[user.steamid]['sums'][gamesMines[user.steamid]['bombsWin'].length],
  246. amount: gamesMines[user.steamid]['sums'][xSum],
  247. new: false
  248. });
  249. xSum++;
  250. });
  251. }
  252.  
  253.  
  254. //GIVEAWAY
  255. if(usersEntered.length > 0){
  256. usersEntered.forEach(function(itm) {
  257. socket.emit('message', {
  258. type: 'joinGiveaway',
  259. player: {
  260. avatar: itm.avatar,
  261. steamid: itm.user,
  262. name: itm.name
  263. }
  264. });
  265. });
  266. }
  267.  
  268. socket.emit('message', {
  269. type: 'timerGiveaway',
  270. mod: 'timer',
  271. time: timerGAWAY,
  272. last: lastWinnerGiveaway
  273. });
  274. socket.emit('message', {
  275. type: 'amountGiveaway',
  276. amount: amountGiveaway
  277. });
  278.  
  279. //JACKPOT
  280. if((usersJPot[user.steamid] !== undefined) && (usersJPot[user.steamid] >= 1)) {
  281. var change = parseFloat(100 * amountJPot[user.steamid] / totalJPot).toFixed(2);
  282.  
  283. socket.emit('message', {
  284. type: 'addChangeJPot',
  285. change: change
  286. });
  287. }
  288. if(betsJPot.length > 0){
  289. betsJPot.forEach(function(itm){
  290. socket.emit('message', {
  291. type: 'addBetJPot',
  292. bet: {
  293. user: itm.user,
  294. avatar: itm.avatar,
  295. name: itm.name,
  296. amount: itm.amount,
  297. tick1: itm.tick1,
  298. tick2: itm.tick2
  299. },
  300. total: totalJPot
  301. });
  302. });
  303. }
  304.  
  305. socket.emit('message', {
  306. type: 'lastWinnerJP',
  307. last: lastWinnerJP
  308. });
  309. }
  310. });
  311. });
  312. socket.on('mes', function(m) {
  313. if(!user) return;
  314.  
  315. if(users[user.steamid] === undefined) return;
  316.  
  317. if(canPlayersBet == 0){
  318. socket.emit('message', {
  319. type: 'error',
  320. enable: false,
  321. error: 'Error: The server are now offline. Please try again later!'
  322. });
  323. return;
  324. }
  325.  
  326. if(user.banPlay == 1){
  327. socket.emit('message', {
  328. type: 'error',
  329. enable: false,
  330. error: 'Error: You are banned to playing!'
  331. });
  332. return;
  333. }
  334.  
  335. logger.debug(user.name+" ("+user.steamid+")");
  336. logger.debug(m);
  337.  
  338. if(user.rank != 100){ //OWNER
  339. if(last_message[user.steamid] + 1 >= time()) {
  340. timesFlooding[user.steamid] += 1;
  341. if (timesFlooding[user.steamid] == 3) {
  342. delete timesFlooding[user.steamid];
  343. logger.debug('<< New Flood from '+user.steamid+' >>');
  344. socket.emit('message', {
  345. type: 'error',
  346. enable: false,
  347. error: 'Disconnected!'
  348. });
  349. return socket.disconnect();
  350. }
  351. socket.emit('message', {
  352. type: 'error',
  353. enable: false,
  354. error: 'Too fast!'
  355. });
  356. return;
  357. } else {
  358. last_message[user.steamid] = time();
  359. }
  360. }
  361.  
  362.  
  363. if(m.type == "verifyAcc") return verifyAcc(user, socket);
  364.  
  365. if(m.type == "availableR") return availableR(m, user, socket);
  366. if(m.type == "groupR") return groupR(m, user, socket);
  367. if(m.type == "nameR") return nameR(m, user, socket);
  368. if(m.type == "codeR") return codeR(m, user, socket);
  369. if(m.type == "bonusR") return bonusR(m, user, socket);
  370. if(m.type == "createR") return createR(m, user, socket);
  371.  
  372. if(m.type == "createBonus") return createBonus(m, user, socket);
  373.  
  374. if(m.type == "tradeurl") return saveTradelink(m, user, socket);
  375.  
  376. if(m.type == "joinJackpot") return joinJackpot(m, user, socket);
  377.  
  378. if(m.type == "joinInG") return joinInGiveaway(user, socket);
  379.  
  380. if(m.type == "mines") {
  381. if(m.mtype == 'play') {
  382. return playMines(m, user, socket);
  383. }else if(m.mtype == 'cashout') {
  384. return cashoutMines(user, socket);
  385. }else if(m.mtype == 'getBomb') {
  386. return getBombMines(m, user, socket);
  387. }
  388. }
  389.  
  390. if(m.type == "crbet") {
  391. if(m.mtype == 'joinCrash') {
  392. return crashBet(m, user, socket);
  393. }else if(m.mtype == 'withdraw') {
  394. return crashCashout(m, user, socket);
  395. }
  396. }
  397.  
  398. if(m.type == "bet") return setBet(m, user, socket);
  399.  
  400. if(m.type == "getMsg") return getMsg(user, socket);
  401. if(m.type == "balance") return getBalance(user.steamid, socket);
  402. if(m.type == "chat") return ch(m, user, socket);
  403. if(m.type == "plus") return plus(user, socket);
  404.  
  405. if(m.type == "createcfgame") return createCFGame(m, user, socket);
  406. if(m.type == "joincfgame") return joinCFGame(m, user, socket);
  407. if(m.type == "watchcfgame") return watchCFGame(m, user, socket);
  408. });
  409.  
  410. socket.on('disconnect', function() {
  411. io.sockets.emit('message', {
  412. type: 'logins',
  413. count: Object.size(io.sockets.connected)
  414. });
  415.  
  416. delete users[user.steamid];
  417. socket.leave(user.steamid);
  418. });
  419. });
  420.  
  421. /* END CONNECT TO SOCKET */
  422. /* CHAT */
  423. var msgChatHist = [];
  424. var msgCurently = 0;
  425. var last_message = {};
  426. var timesFlooding = {};
  427.  
  428. function getMsg(user, socket){
  429. socket.emit('message', {
  430. type: 'chatEmpty'
  431. });
  432. if(msgChatHist.length > 0){
  433. msgChatHist.forEach(function(itm) {
  434. socket.emit('message', {
  435. type: 'chat',
  436. msg: itm.msg,
  437. name: itm.name,
  438. icon: itm.icon,
  439. user: itm.user,
  440. rank: itm.rank,
  441. lang: itm.lang,
  442. hide: itm.hide,
  443. level: itm.level,
  444. id: itm.id,
  445. time: itm.time
  446. });
  447. });
  448. }
  449. }
  450. function ch(m, user, socket) {
  451. if(m.msg) {
  452. query('SELECT `bets`, `balance`, `rank`, `mute` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err, row) {
  453. if((err) || (!row.length)) {
  454. logger.error('Failed to get the person in the database');
  455. logger.debug(err);
  456. socket.emit('message', {
  457. type: 'error',
  458. enable: false,
  459. error: 'Error: User not in DB!'
  460. });
  461. return;
  462. }
  463.  
  464. var n = parseFloat(row[0].bets % Math.pow(10, 3));
  465. var xx = ((parseInt((row[0].bets - n)/xpPerLevel))*xpPerLevel);
  466. var levelA = xx/xpPerLevel;
  467.  
  468. var res = null;
  469. if (res = /^\/send ([0-9]*) ([0-9]*)/.exec(m.msg)) {
  470. logger.trace('We need to send coins from '+res[2]+' to '+res[1]);
  471.  
  472. if(res[1] == user.steamid){
  473. socket.emit('message', {
  474. type: 'error',
  475. enable: false,
  476. error: 'Error: You can\'t send coins to yourself!'
  477. });
  478. return;
  479. }
  480. if(levelA < needLevelToSendCoins){
  481. socket.emit('message', {
  482. type: 'error',
  483. enable: false,
  484. error: 'Error: You need to have level '+needLevelToSendCoins+' to send coins!'
  485. });
  486. return;
  487. }
  488. if(row[0].rank == 8 || row[0].rank == 5) {
  489. // YOUTUBER OR STREAMER
  490. socket.emit('message', {
  491. type: 'error',
  492. enable: false,
  493. error: 'Error: You dont have permission to send coins because you have test coins!'
  494. });
  495. return;
  496. }
  497. if(row[0].balance < res[2]) {
  498. socket.emit('message', {
  499. type: 'error',
  500. enable: false,
  501. error: 'Error: Insufficient funds!'
  502. });
  503. return;
  504. }
  505. if(res[2] < minbet || res[2] > maxbet) {
  506. socket.emit('message', {
  507. type: 'error',
  508. enable: false,
  509. error: 'Error: Invalid bet amount ['+minbet+'-'+maxbet+']!'
  510. });
  511. return;
  512. }
  513. query('SELECT `name` FROM `users` WHERE `steamid` = '+pool.escape(res[1]), function(err2, row2) {
  514. if((err2) || (!row2.length)) {
  515. logger.error('Failed to get the STEAMID');
  516. logger.debug(err2);
  517. socket.emit('message', {
  518. type: 'error',
  519. enable: false,
  520. error: 'Error: Unknown receiver!'
  521. });
  522. return;
  523. }
  524. query('UPDATE `users` SET `balance` = `balance` - '+res[2]+' WHERE `steamid` = '+pool.escape(user.steamid));
  525. query('UPDATE `users` SET `balance` = `balance` + '+res[2]+' WHERE `steamid` = '+pool.escape(res[1]));
  526. query('INSERT INTO `transfers` SET `from1` = '+pool.escape(user.steamid)+', `to1` = '+pool.escape(res[1])+', `amount` = '+pool.escape(res[2])+', `time` = '+pool.escape(time()));
  527. socket.emit('message', {
  528. type: 'alert',
  529. alert: 'You sent '+res[2]+' coins to '+row2[0].name+'.'
  530. });
  531. getBalance(user.steamid, socket);
  532.  
  533. io.sockets.in(res[1]).emit('message', {
  534. type: 'refBalanceSend',
  535. amount: res[2]
  536. });
  537. io.sockets.in(res[1]).emit('message', {
  538. type: 'alert',
  539. alert: 'You received '+res[2]+' coins from '+user.name+'!'
  540. });
  541. });
  542. } else if (res = /^\/ban ([0-9]*) ([a-zA-Z0-9]*)/.exec(m.msg)) {
  543. if(user.rank == 1 || user.rank == 100) { //ADMIN && OWNER
  544. query('UPDATE `users` SET `banPlay` = 1, `reasonBanPlay` = '+pool.escape(res[2])+' WHERE `steamid` = '+pool.escape(res[1]));
  545. socket.emit('message', {
  546. type: 'alert',
  547. alert: user.name+' banned '+res[1]+' for '+res[2]+'!'
  548. });
  549. io.sockets.in(res[1]).emit('message', {
  550. type: 'alert',
  551. alert: 'You have banned for '+res[2]+'!'
  552. });
  553. io.sockets.in(res[1]).emit('message', {
  554. type: 'refreshPage'
  555. });
  556. }
  557. } else if (res = /^\/mute ([0-9]*) ([0-9]*)/.exec(m.msg)) {
  558. if(user.rank == 1 || user.rank == 2 || user.rank == 100){ //ADMIN && OWNER && MODERATOR
  559. var t = time();
  560. query('UPDATE `users` SET `mute` = '+parseInt(time() + res[2])+' WHERE `steamid` = '+pool.escape(res[1]));
  561. socket.emit('message', {
  562. type: 'alert',
  563. alert: 'You mute '+res[1]+' to '+res[2]
  564. });
  565.  
  566. io.sockets.in(res[1]).emit('message', {
  567. type: 'alert',
  568. alert: 'You have muted for '+res[2]+' seconds!'
  569. });
  570. }
  571. //CHAT
  572. } else if (res = /^\/deletemsg ([0-9]*)/.exec(m.msg)) {
  573. if(user.rank == 1 || user.rank == 2 || user.rank == 100){ //ADMIN && OWNER && MODERATOR
  574. if(res[1] && res[1] <= msgCurently){
  575. delete msgChatHist[res[1]];
  576. socket.emit('message', {
  577. type: 'alert',
  578. alert: 'Message deleted!'
  579. });
  580. io.sockets.emit('message', {
  581. type: 'deleteMsg',
  582. id: res[1]
  583. });
  584. }else{
  585. socket.emit('message', {
  586. type: 'error',
  587. enable: false,
  588. error: 'Error: You are inserted an incorrect id!'
  589. });
  590. return;
  591. }
  592. }
  593. } else if (res = /^\/clearchat/.exec(m.msg)) {
  594. if(user.rank == 1 || user.rank == 2 || user.rank == 100){ //ADMIN && OWNER && MODERATOR
  595. if(msgCurently > 0){
  596. msgChatHist = [];
  597. socket.emit('message', {
  598. type: 'alert',
  599. alert: 'Chat cleared!'
  600. });
  601. io.sockets.emit('message', {
  602. type: 'deleteAllMsg',
  603. rank: user.rank
  604. });
  605. msgCurently = 0;
  606. }else{
  607. socket.emit('message', {
  608. type: 'error',
  609. enable: false,
  610. error: 'Error: There are no messages!'
  611. });
  612. return;
  613. }
  614. }
  615. //GIVEAWAY
  616. } else if (res = /^\/close/.exec(m.msg)) {
  617. if(user.rank == 100){ //OWNER
  618. io.sockets.emit('message', {
  619. type: 'refreshPage'
  620. });
  621. io.sockets.emit('message', {
  622. type: 'cashoutMines'
  623. });
  624. return;
  625. }
  626. } else if (res = /^\/pickwinner/.exec(m.msg)) {
  627. if(user.rank == 1 || user.rank == 100){ //ADMIN && OWNER
  628. timerGAWAY = 0;
  629. socket.emit('message', {
  630. type: 'alert',
  631. alert: 'Giveaway picking'
  632. });
  633. }
  634. } else if (res = /^\/amountg ([0-9.]*)/.exec(m.msg)) {
  635. if(user.rank == 1 || user.rank == 100){ //ADMIN && OWNER
  636. if(res[1] > 0){
  637. amountGiveaway = res[1];
  638. io.sockets.emit('message', {
  639. type: 'amountGiveaway',
  640. amount: amountGiveaway
  641. });
  642. socket.emit('message', {
  643. type: 'alert',
  644. alert: 'Amount giveaway setted to '+amountGiveaway
  645. });
  646. }else{
  647. socket.emit('message', {
  648. type: 'error',
  649. enable: false,
  650. error: 'Error: Amount need be > 0!'
  651. });
  652. return;
  653. }
  654. }
  655. //CRASH
  656. } else if (res = /^\/nextcrash ([0-9.]*)/.exec(m.msg)) {
  657. if(user.rank == 1 || user.rank == 100){ //ADMIN && OWNER
  658. riggedMode = true;
  659. riggedValue = parseInt(res[1]*100);
  660.  
  661. socket.emit('message', {
  662. type: 'alert',
  663. alert: 'Next crash set: '+(riggedValue/100).toFixed(2)+'x [Good luck !]'
  664. });
  665. }
  666. } else if (res = /^\/crashnow/.exec(m.msg)) {
  667. if(user.rank == 1 || user.rank == 100){ //ADMIN && OWNER
  668. if(crashState == 'STARTED') {
  669. crashAt = pointCrash * 100;
  670.  
  671. socket.emit('message', {
  672. type: 'alert',
  673. alert: 'Crashed now, successfully!'
  674. });
  675. }else {
  676. socket.emit('message', {
  677. type: 'error',
  678. error: 'Error: The game needs to be started!'
  679. });
  680. return;
  681. }
  682. }
  683. //BETS FOR ALL
  684. } else if (res = /^\/stopbets/.exec(m.msg)) {
  685. if(user.rank == 1 || user.rank == 100){ //ADMIN && OWNER
  686. canPlayersBet = 0;
  687. io.sockets.emit('message', {
  688. type: 'alert',
  689. alert: 'The bets are now offline'
  690. });
  691. }
  692. } else if (res = /^\/startbots/.exec(m.msg)) {
  693. if(user.rank == 100){
  694. if(BotsStarted == 1) {
  695. socket.emit('message', {
  696. type: 'bots',
  697. msg: 'Error: The bots are already started!'
  698. });
  699. }else {
  700. BotsStarted = 1;
  701. IntervalulLaBoti = 1;
  702. addBots();
  703. }
  704. }
  705. } else if (res = /^\/stopbots/.exec(m.msg)) {
  706. if(user.rank == 100){
  707. BotsStarted = 1;
  708. IntervalulLaBoti = 1;
  709. addBots();
  710. if(BotsStarted == 0) {
  711. socket.emit('message', {
  712. type: 'bots',
  713. msg: 'Error: The bots are already stopped!'
  714. });
  715. }else {
  716. BotsStarted = 0;
  717. clearInterval(IntervalBetuireBoti);
  718. }
  719. }
  720. } else if (res = /^\/addbots ([0-9_\-.]*)/.exec(m.msg)) {
  721. if(user.rank == 100){
  722. if(BotsStarted != 1) {
  723. BotsStarted = 1;
  724. IntervalulLaBoti = res[1];
  725. addBots();
  726. socket.emit('message', {
  727. type: 'alert',
  728. alert: 'You started automaticaly betting bots. [Time for every bet of bot: '+IntervalulLaBoti+' seconds]'
  729. });
  730. }else {
  731. socket.emit('message', {
  732. type: 'alert',
  733. alert: 'The bots are already started!'
  734. });
  735. }
  736. }
  737. } else if (res = /^\/stopbots/.exec(m.msg)) {
  738. if(user.rank == 100){
  739. if(BotsStarted == 1) {
  740. BotsStarted = 0;
  741. clearInterval(IntervalBetuireBoti);
  742. socket.emit('message', {
  743. type: 'alert',
  744. alert: 'You stopped bots!'
  745. });
  746. }else {
  747. socket.emit('message', {
  748. type: 'alert',
  749. alert: 'The bots are already stopped!'
  750. });
  751. }
  752. }
  753. }else if (res = /^\/startbotschat/.exec(m.msg)) {
  754. if(user.rank == 100){
  755. if(BotsStarted == 1) {
  756. ChatsBots();
  757. socket.emit('message', {
  758. type: 'alert',
  759. alert: 'You started chat of bots!'
  760. });
  761. }else {
  762. socket.emit('message', {
  763. type: 'alert',
  764. alert: 'The bots are offline, first start bots by typing: /addbots <seconds>!'
  765. });
  766. }
  767. }
  768. }else if (res = /^\/stopbotschat/.exec(m.msg)) {
  769. if(user.rank == 100){
  770. if(BotsStarted == 1) {
  771. clearInterval(IntervalChatBotii);
  772. socket.emit('message', {
  773. type: 'alert',
  774. alert: 'You stopped chat of bots!'
  775. });
  776. }else {
  777. socket.emit('message', {
  778. type: 'alert',
  779. alert: 'The bots are offline, first start bots by typing: /addbots <seconds>!'
  780. });
  781. }
  782. }
  783. } else if (res = /^\/startbets/.exec(m.msg)) {
  784. if(user.rank == 1 || user.rank == 100){ //ADMIN && OWNER
  785. canPlayersBet = 1;
  786. io.sockets.emit('message', {
  787. type: 'alert',
  788. alert: 'The bets are now online.'
  789. });
  790. }
  791. //MESSAGE
  792. } else if (res = /(?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?|?)/.exec(m.msg)) {
  793.  
  794. socket.emit('message', {
  795. type: 'alert',
  796. alert: 'Only English on chat!'
  797. });
  798. } else if (res = /(scam|SCAM|S C A M|s c a m|s.c.a.m|s c a m)/.exec(m.msg)) {
  799.  
  800. socket.emit('message', {
  801. type: 'alert',
  802. alert: 'We have trusted site, if you try write one more time, you will be mutted'
  803. });
  804.  
  805. //MESSAGE
  806. } else {
  807. if(row[0].mute > time()) {
  808. socket.emit('message', {
  809. type: 'alert',
  810. alert: 'You are muted for '+parseInt((row[0].mute-time())/3600)+' hours'
  811. });
  812. return;
  813. }
  814.  
  815. var timeMsgH = new Date().getHours();
  816. if(timeMsgH < 10) timeMsgH = '0'.concat(timeMsgH);
  817. var timeMsgM = new Date().getMinutes();
  818. if(timeMsgM < 10) timeMsgM = '0'.concat(timeMsgM);
  819. var timeMsg = timeMsgH+":"+timeMsgM;
  820.  
  821. io.sockets.emit('message', {
  822. type: 'chat',
  823. msg: safe_tags_replace(m.msg),
  824. name: user.name,
  825. icon: user.avatar,
  826. user: user.steamid,
  827. rank: user.rank,
  828. lang: m.lang,
  829. hide: m.hide,
  830. level: levelA,
  831. id: msgCurently,
  832. time: timeMsg
  833. });
  834.  
  835. if(msgChatHist.length > 30){
  836. msgChatHist.shift();
  837. }
  838.  
  839. msgChatHist.push({
  840. msg: safe_tags_replace(m.msg),
  841. name: user.name,
  842. icon: user.avatar,
  843. user: user.steamid,
  844. rank: user.rank,
  845. lang: m.lang,
  846. hide: m.hide,
  847. level: levelA,
  848. id: msgCurently,
  849. time: timeMsg
  850. });
  851. msgCurently++;
  852. }
  853. });
  854. }
  855. }
  856. /* END CHAT */
  857. /* REFRESH BALANCE */
  858. function getBalance(steamid, socket) {
  859. query('SELECT `balance` FROM `users` WHERE `steamid` = '+pool.escape(steamid), function(err, row) {
  860. if((err) || (!row.length)) {
  861. logger.error('Failed to load your balance');
  862. logger.debug(err);
  863. socket.emit('message', {
  864. type: 'error',
  865. enable: false,
  866. error: 'Error: You are not DB!'
  867. });
  868. return;
  869. }
  870. socket.emit('message', {
  871. type: 'balance',
  872. balance: row[0].balance
  873. });
  874. users[steamid].balance = parseInt(row[0].balance);
  875. });
  876. }
  877. /* END REFRESH BALANCE */
  878. /* TRADE LINK */
  879. function saveTradelink(m, user, socket){
  880. if(!m.url){
  881. socket.emit('message', {
  882. type: 'error',
  883. mtype: 'tradeLink',
  884. enable: true,
  885. error: 'Error: Tradelink cannot be empty!'
  886. });
  887. return;
  888. }
  889.  
  890. if(m.url.includes('https://steamcommunity.com/tradeoffer/new/?partner=') == false || m.url.includes('&token=') == false){
  891. socket.emit('message', {
  892. type: 'error',
  893. mtype: 'tradeLink',
  894. enable: true,
  895. error: 'Error: Tradelink is invalid!'
  896. });
  897. return;
  898. }
  899.  
  900. query('UPDATE `users` SET `tradeLink` = '+pool.escape(m.url)+' WHERE `steamid`='+pool.escape(user.steamid), function(err, row) {
  901. if(err) {
  902. logger.error(err);
  903. return;
  904. }
  905. });
  906.  
  907. socket.emit('message', {
  908. type: 'alert',
  909. alert: 'Tradelink saved!'
  910. });
  911. }
  912. /* END TRADE LINK */
  913. /* REWARDS */
  914.  
  915. function availableR(m, user, socket){
  916. request('http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=926A7D90AE95AF66BE01CF96CD6C647D&steamid='+user.steamid+'&format=json', function(err1, response1) {
  917. if(err1) {
  918. logger.error(err1);
  919. return;
  920. }
  921.  
  922. var csgo = false;
  923. var res = JSON.parse(response1.body);
  924. var games = res.response.games;
  925.  
  926. if(games !== undefined){
  927. games.forEach(function(game){
  928. if(game.appid == AppID) csgo = true;
  929. });
  930. }
  931.  
  932. if(!csgo){
  933. socket.emit('message', {
  934. type: 'error',
  935. mtype: 'rewards',
  936. ptype: m.type,
  937. enable: true,
  938. error: 'Error: You dont have '+nameForGame+'!'
  939. });
  940. return;
  941. }
  942.  
  943. query('SELECT `code` FROM `codes` WHERE `user` = '+pool.escape(user.steamid), function(err2, code){
  944. if(err2){
  945. socket.emit('message', {
  946. type: 'error',
  947. mtype: 'rewards',
  948. ptype: m.type,
  949. enable: true,
  950. error: 'Error: You don\'t have a code to collect the coins!'
  951. });
  952. return;
  953. }
  954.  
  955. query('SELECT `referrals` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err3, coins){
  956. if(err3) {
  957. logger.error(err3);
  958. return;
  959. }
  960.  
  961. if(coins[0].referrals == 0){
  962. socket.emit('message', {
  963. type: 'error',
  964. mtype: 'rewards',
  965. ptype: m.type,
  966. enable: true,
  967. error: 'Error: You do not have a coin to collect!'
  968. });
  969. return;
  970. }
  971.  
  972. if(coins[0].referrals > 0){
  973. query('UPDATE `users` SET `balance` = `balance` + '+parseInt(coins[0].referrals)+', `referrals` = 0 WHERE `steamid`='+pool.escape(user.steamid), function(err4, row) {
  974. if(err4) {
  975. logger.error(err4);
  976. return;
  977. }
  978.  
  979. getBalance(user.steamid, socket);
  980. socket.emit('message', {
  981. type: 'alert',
  982. alert: 'You collected '+coins[0].referrals+' coins!'
  983. });
  984.  
  985. socket.emit('message', {
  986. type: 'refRewards'
  987. });
  988. });
  989. return;
  990. }
  991. });
  992. });
  993. });
  994. }
  995.  
  996. function groupR(m, user, socket){
  997. query('SELECT `groupR` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err1, row1){
  998. if(err1) {
  999. logger.error(err1);
  1000. return;
  1001. }
  1002.  
  1003. if(parseInt(row1[0].nameR)){
  1004. socket.emit('message', {
  1005. type: 'error',
  1006. mtype: 'rewards',
  1007. ptype: m.type,
  1008. enable: true,
  1009. error: 'Error: You already collect the reward!'
  1010. });
  1011. return;
  1012. }
  1013.  
  1014. request('http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key='+ApiKey+'&steamid='+user.steamid+'&format=json', function(err2, response2) {
  1015. if(err2) {
  1016. logger.error(err2);
  1017. return;
  1018. }
  1019.  
  1020. var csgo = false;
  1021. var res = JSON.parse(response2.body);
  1022. var games = res.response.games;
  1023.  
  1024. if(games !== undefined){
  1025. games.forEach(function(game){
  1026. if(game.appid == AppID) csgo = true;
  1027. });
  1028. }
  1029.  
  1030. if(!csgo){
  1031. socket.emit('message', {
  1032. type: 'error',
  1033. mtype: 'rewards',
  1034. ptype: m.type,
  1035. enable: true,
  1036. error: 'Error: You dont have '+nameForGame+'!'
  1037. });
  1038. return;
  1039. }
  1040.  
  1041. request('http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key='+ApiKey+'&steamids='+user.steamid, function(err3, response3) {
  1042. if(err3) {
  1043. logger.error(err3);
  1044. return;
  1045. }
  1046.  
  1047. var res = JSON.parse(response3.body);
  1048. var idGroup = res.response.players[0].primaryclanid;
  1049.  
  1050. if(idGroup != groupId){
  1051. socket.emit('message', {
  1052. type: 'error',
  1053. mtype: 'rewards',
  1054. ptype: m.type,
  1055. enable: true,
  1056. error: 'Error: Please join to '+nameSite+' Group and set primary group!'
  1057. });
  1058. return;
  1059. }
  1060.  
  1061. query('UPDATE `users` SET `balance` = `balance` + '+parseInt(coinGroupR)+', `groupR` = 1 WHERE `steamid`='+pool.escape(user.steamid), function(err4, row4) {
  1062. if(err4) {
  1063. logger.error(err4);
  1064. return;
  1065. }
  1066.  
  1067. getBalance(user.steamid, socket);
  1068. socket.emit('message', {
  1069. type: 'alert',
  1070. alert: 'You claimed '+coinGroupR+' coins!'
  1071. });
  1072.  
  1073. socket.emit('message', {
  1074. type: 'refRewards'
  1075. });
  1076. });
  1077. });
  1078. });
  1079. });
  1080. }
  1081.  
  1082. function nameR(m, user, socket){
  1083. query('SELECT `nameR` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err1, row1){
  1084. if(err1) {
  1085. logger.error(err1);
  1086. return;
  1087. }
  1088.  
  1089. if(parseInt(row1[0].nameR)){
  1090. socket.emit('message', {
  1091. type: 'error',
  1092. mtype: 'rewards',
  1093. ptype: m.type,
  1094. enable: true,
  1095. error: 'Error: You already collect the reward!'
  1096. });
  1097. return;
  1098. }
  1099.  
  1100. request('http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key='+ApiKey+'&steamid='+user.steamid+'&format=json', function(err2, response2) {
  1101. if(err2) {
  1102. logger.error(err2);
  1103. return;
  1104. }
  1105.  
  1106. var csgo = false;
  1107. var res = JSON.parse(response2.body);
  1108. var games = res.response.games;
  1109.  
  1110. if(games !== undefined){
  1111. games.forEach(function(game){
  1112. if(game.appid == AppID) csgo = true;
  1113. });
  1114. }
  1115.  
  1116. if(!csgo){
  1117. socket.emit('message', {
  1118. type: 'error',
  1119. mtype: 'rewards',
  1120. ptype: m.type,
  1121. enable: true,
  1122. error: 'Error: You dont have '+nameForGame+'!'
  1123. });
  1124. return;
  1125. }
  1126.  
  1127. request('http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key='+ApiKey+'&steamids='+user.steamid, function(err3, response3) {
  1128. if(err3) {
  1129. logger.error(err3);
  1130. return;
  1131. }
  1132.  
  1133. var res = JSON.parse(response3.body);
  1134. var name = res.response.players[0].personaname;
  1135.  
  1136. if(!/CSGODamascus.com/.exec(name)) {
  1137. socket.emit('message', {
  1138. type: 'error',
  1139. mtype: 'rewards',
  1140. ptype: m.type,
  1141. enable: true,
  1142. error: 'Error: Please add '+nameSite+' to your Steam name!'
  1143. });
  1144. return;
  1145. }
  1146.  
  1147. query('UPDATE `users` SET `balance` = `balance` + '+parseInt(coinNameR)+', `nameR` = 1 WHERE `steamid`='+pool.escape(user.steamid), function(err4, row4) {
  1148. if(err4) {
  1149. logger.error(err4);
  1150. return;
  1151. }
  1152.  
  1153. getBalance(user.steamid, socket);
  1154. socket.emit('message', {
  1155. type: 'alert',
  1156. alert: 'You claimed '+coinNameR+' coins!'
  1157. });
  1158.  
  1159. socket.emit('message', {
  1160. type: 'refRewards'
  1161. });
  1162. });
  1163. });
  1164. });
  1165. });
  1166. }
  1167.  
  1168. function codeR(m, user, socket){
  1169. query('SELECT `codeR` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err1, row1){
  1170. if(err1) {
  1171. logger.error(err1);
  1172. return;
  1173. }
  1174.  
  1175. if(parseInt(row1[0].codeR)){
  1176. socket.emit('message', {
  1177. type: 'error',
  1178. mtype: 'rewards',
  1179. ptype: m.type,
  1180. enable: true,
  1181. error: 'Error: You already collect the reward!'
  1182. });
  1183. return;
  1184. }
  1185.  
  1186. request('http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key='+ApiKey+'&steamid='+user.steamid+'&format=json', function(err2, response) {
  1187. if(err2) {
  1188. logger.error(err2);
  1189. return;
  1190. }
  1191.  
  1192. var csgo = false;
  1193. var res = JSON.parse(response.body);
  1194. var games = res.response.games;
  1195.  
  1196. if(games !== undefined){
  1197. games.forEach(function(game){
  1198. if(game.appid == AppID) csgo = true;
  1199. });
  1200. }
  1201.  
  1202. if(!csgo){
  1203. socket.emit('message', {
  1204. type: 'error',
  1205. mtype: 'rewards',
  1206. ptype: m.type,
  1207. enable: true,
  1208. error: 'Error: You dont have '+nameForGame+'!'
  1209. });
  1210. return;
  1211. }
  1212.  
  1213. query('SELECT `user` FROM `codes` WHERE `code` = '+pool.escape(m.code), function(err3, row3){
  1214. if(!row3[0]){
  1215. socket.emit('message', {
  1216. type: 'error',
  1217. mtype: 'rewards',
  1218. ptype: m.type,
  1219. enable: true,
  1220. error: 'Error: Code not found!'
  1221. });
  1222. return;
  1223. }
  1224.  
  1225. if(row3[0].user == user.steamid){
  1226. socket.emit('message', {
  1227. type: 'error',
  1228. mtype: 'rewards',
  1229. ptype: m.type,
  1230. enable: true,
  1231. error: 'Error: This is you referal code!'
  1232. });
  1233. return;
  1234. }
  1235.  
  1236. query('UPDATE `users` SET `balance` = `balance` + '+parseInt(coinCodeR)+', `codeR` = '+pool.escape(row3[0].user)+' WHERE `steamid` = '+pool.escape(user.steamid), function(err4, row4) {
  1237. if(err4) {
  1238. logger.error(err4);
  1239. return;
  1240. }
  1241.  
  1242. getBalance(user.steamid, socket);
  1243. socket.emit('message', {
  1244. type: 'alert',
  1245. alert: 'You claimed '+coinCodeR+' coins!'
  1246. });
  1247.  
  1248. socket.emit('message', {
  1249. type: 'refRewards'
  1250. });
  1251. });
  1252.  
  1253. query('UPDATE `users` SET `referrals` = `referrals` + '+parseInt(coinFriendR)+' WHERE `steamid` = '+pool.escape(row3[0].user), function(err5, row5) {
  1254. if(err5) {
  1255. logger.error(err5);
  1256. return;
  1257. }
  1258. });
  1259. });
  1260. });
  1261. });
  1262. }
  1263.  
  1264. function bonusR(m, user, socket){
  1265. query('SELECT * FROM `bonus` WHERE `steamid` = '+pool.escape(user.steamid), function(err1, row1){
  1266. if(err1) {
  1267. logger.error(err1);
  1268. return;
  1269. }
  1270.  
  1271. if(row1[0]){
  1272. socket.emit('message', {
  1273. type: 'error',
  1274. mtype: 'rewards',
  1275. ptype: m.type,
  1276. enable: true,
  1277. error: 'Error: You already claimed the bonus code!'
  1278. });
  1279. return;
  1280. }
  1281.  
  1282. query('SELECT `max_useds`, `useds`, `amount` FROM `bonus` WHERE `code` = '+pool.escape(m.code), function(err2, row2){
  1283. if(!row2[0]){
  1284. socket.emit('message', {
  1285. type: 'error',
  1286. mtype: 'rewards',
  1287. ptype: m.type,
  1288. enable: true,
  1289. error: 'Error: This code is invalid!'
  1290. });
  1291. return;
  1292. }
  1293.  
  1294. if(row2[0].useds >= row2[0].max_useds){
  1295. socket.emit('message', {
  1296. type: 'error',
  1297. mtype: 'rewards',
  1298. ptype: m.type,
  1299. enable: true,
  1300. error: 'Error: The code is already maximum used!'
  1301. });
  1302. return;
  1303. }
  1304.  
  1305. request('http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key='+ApiKey+'&steamid='+user.steamid+'&format=json', function(err3, response3) {
  1306. if(err3) {
  1307. logger.error(err3);
  1308. return;
  1309. }
  1310.  
  1311. var csgo = false;
  1312. var res = JSON.parse(response3.body);
  1313. var games = res.response.games;
  1314.  
  1315. if(games !== undefined){
  1316. games.forEach(function(game){
  1317. if(game.appid == AppID) csgo = true;
  1318. });
  1319. }
  1320.  
  1321. if(!csgo){
  1322. socket.emit('message', {
  1323. type: 'error',
  1324. mtype: 'rewards',
  1325. ptype: m.type,
  1326. enable: true,
  1327. error: 'Error: You dont have '+nameForGame+'!'
  1328. });
  1329. return;
  1330. }
  1331.  
  1332. query('UPDATE `users` SET `balance` = `balance` + '+parseInt(row2[0].amount)+' WHERE `steamid`='+pool.escape(user.steamid), function(err4, row4) {
  1333. if(err4) {
  1334. logger.error(err4);
  1335. return;
  1336. }
  1337.  
  1338. getBalance(user.steamid, socket);
  1339. socket.emit('message', {
  1340. type: 'alert',
  1341. alert: 'You claimed '+parseInt(row2[0].amount)+' coins!'
  1342. });
  1343.  
  1344. socket.emit('message', {
  1345. type: 'refRewards'
  1346. });
  1347. });
  1348.  
  1349. query('INSERT INTO `bonus` SET `steamid` = '+pool.escape(user.steamid), function(err5, row5) {
  1350. if(err5) {
  1351. logger.error(err5);
  1352. return;
  1353. }
  1354. });
  1355.  
  1356. query('UPDATE `bonus` SET `useds` = `useds` + 1 WHERE `code` = '+pool.escape(m.code), function(err6, row6) {
  1357. if(err6) {
  1358. logger.error(err6);
  1359. return;
  1360. }
  1361. });
  1362. });
  1363. });
  1364. });
  1365. }
  1366.  
  1367. function createR(m, user, socket){
  1368. request('http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key='+ApiKey+'&steamid='+user.steamid+'&format=json', function(err1, response) {
  1369. if(err1) {
  1370. logger.error(err1);
  1371. return;
  1372. }
  1373.  
  1374. var csgo = false;
  1375. var res = JSON.parse(response.body);
  1376. var games = res.response.games;
  1377.  
  1378. if(games !== undefined){
  1379. games.forEach(function(game){
  1380. if(game.appid == AppID) csgo = true;
  1381. });
  1382. }
  1383.  
  1384. if(!csgo){
  1385. socket.emit('message', {
  1386. type: 'error',
  1387. mtype: 'rewards',
  1388. ptype: m.type,
  1389. enable: true,
  1390. error: 'Error: You dont have '+nameForGame+'!'
  1391. });
  1392. return;
  1393. }
  1394.  
  1395. query('SELECT `user` FROM `codes` WHERE `code` = '+pool.escape(m.code), function(err2, row2){
  1396. if(row2[0]){
  1397. socket.emit('message', {
  1398. type: 'error',
  1399. mtype: 'rewards',
  1400. ptype: m.type,
  1401. enable: true,
  1402. error: 'Error: This code is already used!'
  1403. });
  1404. return;
  1405. }
  1406.  
  1407. if(!row2[0]){
  1408. query('SELECT * FROM `codes` WHERE `user` = '+pool.escape(user.steamid), function(err3, row3){
  1409. if(row3[0]){
  1410. query('UPDATE `codes` SET `code` = '+pool.escape(m.code)+' WHERE `user`='+pool.escape(user.steamid), function(err4, row4) {
  1411. if(err4) {
  1412. logger.error(err4);
  1413. return;
  1414. }
  1415.  
  1416. socket.emit('message', {
  1417. type: 'alert',
  1418. alert: 'Code updated!'
  1419. });
  1420.  
  1421. socket.emit('message', {
  1422. type: 'refRewards'
  1423. });
  1424. });
  1425. return;
  1426. }
  1427.  
  1428. if(!row3[0]){
  1429. query('INSERT INTO `codes` SET `user` = '+pool.escape(user.steamid)+', `code` = '+pool.escape(m.code), function(err4, row4) {
  1430. if(err4) {
  1431. logger.error(err4);
  1432. return;
  1433. }
  1434.  
  1435. socket.emit('message', {
  1436. type: 'alert',
  1437. alert: 'Code created!'
  1438. });
  1439. });
  1440. return;
  1441. }
  1442. });
  1443. }
  1444. });
  1445. });
  1446. }
  1447.  
  1448. function createBonus(m, user, socket){
  1449. if(user.rank != 1 && user.rank != 2 && user.rank != 100){
  1450. socket.emit('message', {
  1451. type: 'error',
  1452. enable: false,
  1453. error: 'Error: You don\'t have permission to use that!'
  1454. });
  1455. return;
  1456. }
  1457.  
  1458. if(!(/(^[0-9]*$)/.exec(m.amount))){
  1459. socket.emit('message', {
  1460. type: 'error',
  1461. enable: false,
  1462. error: 'Error: Invalid amount!'
  1463. });
  1464. return;
  1465. }
  1466.  
  1467. if(!(/(^[0-9]*$)/.exec(m.maxuseds))){
  1468. socket.emit('message', {
  1469. type: 'error',
  1470. enable: false,
  1471. error: 'Error: Invalid maximum users!'
  1472. });
  1473. return;
  1474. }
  1475.  
  1476. if(!(/(^[a-zA-Z0-9]*$)/.exec(m.code))){
  1477. socket.emit('message', {
  1478. type: 'error',
  1479. enable: false,
  1480. error: 'Error: Invalid code!'
  1481. });
  1482. return;
  1483. }
  1484.  
  1485. query('SELECT * FROM `bonus` WHERE `code` = '+pool.escape(m.code), function(err1, row1){
  1486. if(row1.length != 0){
  1487. socket.emit('message', {
  1488. type: 'error',
  1489. enable: false,
  1490. error: 'Error: Code already exists!'
  1491. });
  1492. return;
  1493. }
  1494.  
  1495. query('TRUNCATE table `bonus`', function(){
  1496. query('INSERT INTO `bonus` SET `code` = '+pool.escape(m.code)+', `amount` = '+parseInt(m.amount)+', `max_useds` = '+parseInt(m.maxuseds)+', `useds` = 0', function(err2, row2){
  1497. if(err2){
  1498. logger.error(err2);
  1499. return;
  1500. }
  1501.  
  1502. socket.emit('message', {
  1503. type: 'alert',
  1504. alert: 'Code created!'
  1505. });
  1506. });
  1507. });
  1508. });
  1509. }
  1510. /* END REWARDS */
  1511. /* VERIFY ACC */
  1512. function verifyAcc(user, socket){
  1513. request('http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key='+ApiKey+'&steamid='+user.steamid+'&format=json', function(err1, response) {
  1514. if(err1) {
  1515. logger.error(err1);
  1516. return;
  1517. }
  1518.  
  1519. var csgo = false;
  1520. var res = JSON.parse(response.body);
  1521. var games = res.response.games;
  1522.  
  1523. if(games !== undefined){
  1524. games.forEach(function(game){
  1525. if(game.appid == AppID) csgo = true;
  1526. });
  1527. }
  1528.  
  1529. if(!csgo){
  1530. socket.emit('message', {
  1531. type: 'error',
  1532. mtype: 'account',
  1533. enable: true,
  1534. error: 'Error: You dont have '+nameForGame+'!'
  1535. });
  1536. return;
  1537. }
  1538.  
  1539. query('SELECT `verified` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err2, row2){
  1540. if(row2[0].verified == 1){
  1541. socket.emit('message', {
  1542. type: 'error',
  1543. mtype: 'account',
  1544. enable: true,
  1545. error: 'Error: Your account is already verified!'
  1546. });
  1547. return;
  1548. }
  1549.  
  1550. query('UPDATE `users` SET `verified` = 1 WHERE `steamid` = '+pool.escape(user.steamid), function(err3, row3) {
  1551. if(err3) {
  1552. logger.error(err3);
  1553. return;
  1554. }
  1555.  
  1556. socket.emit('message', {
  1557. type: 'alert',
  1558. alert: 'Account successfully verified!'
  1559. });
  1560.  
  1561. socket.emit('message', {
  1562. type: 'refAccount'
  1563. });
  1564. });
  1565. });
  1566. });
  1567. }
  1568. /* END VERIFY ACC */
  1569.  
  1570.  
  1571.  
  1572.  
  1573.  
  1574.  
  1575.  
  1576.  
  1577.  
  1578.  
  1579.  
  1580. /* -------------- GAMES --------------*/
  1581.  
  1582.  
  1583.  
  1584.  
  1585.  
  1586. /* CRASH */
  1587. var usersCrash = {};
  1588. var betsCrash = [];
  1589.  
  1590. var riggedMode = false;
  1591. var riggedValue;
  1592.  
  1593. var crashState = 'ENDED';
  1594.  
  1595. var crashAt = 0;
  1596. var pointCrash = 0;
  1597.  
  1598. var hashCodeCrash = '';
  1599. var secretCodeCrash = '';
  1600. var lotteryCodeCrash = '';
  1601.  
  1602. var timerIntCrash;
  1603. var startCrashTime = 0;
  1604. var endedCrashTime = 0;
  1605.  
  1606. hashCrash();
  1607.  
  1608. function crashBet(m, user, socket) {
  1609. if(usersCrash[user.steamid] !== undefined && usersCrash[user.steamid]['play']) {
  1610. socket.emit('message', {
  1611. type: 'error',
  1612. mtype: 'crash',
  1613. enable: true,
  1614. error: 'Error: You have already joined the crash!'
  1615. });
  1616. return;
  1617. }
  1618. if(m.autoCash <= 100 && m.autoCash != 0) {
  1619. socket.emit('message', {
  1620. type: 'error',
  1621. mtype: 'crash',
  1622. enable: true,
  1623. error: 'Error: Cashout needs to be more than 1.00x!'
  1624. });
  1625. return;
  1626. }
  1627. if(!(/(^[0-9.]*$)/.exec(m.autoCash))){
  1628. socket.emit('message', {
  1629. type: 'error',
  1630. mtype: 'crash',
  1631. enable: true,
  1632. error: 'Error: Cashout needs to be more than 1.00x!'
  1633. });
  1634. logger.warn(user.steamid+' try to cheating to CRASH CASHOUT_AMOUNT');
  1635. return;
  1636. }
  1637. if((m.amount < minbet) || (m.amount > maxbet)) {
  1638. socket.emit('message', {
  1639. type: 'error',
  1640. mtype: 'crash',
  1641. enable: true,
  1642. error: 'Error: Invalid bet amount ['+minbet+'-'+maxbet+']!'
  1643. });
  1644. return;
  1645. }
  1646. if(/(a|b|c|d|e|f|g|h|j|i|k|l|m|n|o|p|q|r|s|t|v|u|w|x|y|z)/.exec(m.amount)) {
  1647. socket.emit('message', {
  1648. type: 'error',
  1649. mtype: 'crash',
  1650. enable: true,
  1651. error: 'Error: Invalid bet amount!'
  1652.  
  1653. });
  1654. logger.warn(user.steamid+' try to cheating to CRASH BET_AMOUNT');
  1655. return;
  1656. }
  1657. if(crashState != 'STARTING') {
  1658. socket.emit('message', {
  1659. type: 'error',
  1660. mtype: 'crash',
  1661. enable: true,
  1662. error: 'Error: The game have been already started!'
  1663. });
  1664. return;
  1665. }
  1666. var start_time = new Date();
  1667. query('SELECT `balance`, `countDeposits`, `bets` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err, row) {
  1668. if((err) || (!row.length)) {
  1669. logger.error('Failed to find DB');
  1670. logger.debug(err);
  1671. socket.emit('message', {
  1672. type: 'error',
  1673. mtype: 'crash',
  1674. enable: true,
  1675. error: 'Error: You are not DB!'
  1676. });
  1677. return;
  1678. }
  1679.  
  1680. var n = parseFloat(row[0].bets % Math.pow(10, 3));
  1681. var xx = ((parseInt((row[0].bets - n)/xpPerLevel))*xpPerLevel);
  1682. var levelA = xx/xpPerLevel;
  1683.  
  1684. if(row[0].balance >= m.amount) {
  1685. query('UPDATE `users` SET `balance` = `balance` - '+parseInt(m.amount)+' WHERE `steamid` = '+pool.escape(user.steamid), function(err2, row2) {
  1686. if(err2) {
  1687. logger.error('Error in withdraw');
  1688. logger.debug(err);
  1689. socket.emit('message', {
  1690. type: 'error',
  1691. mtype: 'crash',
  1692. enable: true,
  1693. error: 'Error: You dont have enough points!'
  1694. });
  1695. return;
  1696. }
  1697.  
  1698. if(row[0].countDeposits >= 1) query('UPDATE `users` SET `available` = `available` + '+parseInt(m.amount / 3)+' WHERE `steamid` = '+pool.escape(user.steamid));
  1699. if(row[0].countDeposits >= 0) query('UPDATE `users` SET `bets` = `bets` + '+parseInt(m.amount)+' WHERE `steamid` = '+pool.escape(user.steamid));
  1700.  
  1701. query('INSERT INTO `crbets` SET `user` = '+pool.escape(user.steamid)+', `amount` = '+pool.escape(m.amount)+', `autoCashout` = '+pool.escape((m.autoCash != 0) ? m.autoCash : 'infinity'), function(err3, row3) {
  1702. if(err3) {
  1703. logger.error('Error in DB');
  1704. logger.debug(err);
  1705. return;
  1706. }
  1707. var end = new Date();
  1708.  
  1709. if(usersCrash[user.steamid] === undefined) {
  1710. usersCrash[user.steamid] = {
  1711. 'play': true,
  1712. 'id': row3.insertId,
  1713. 'amount': m.amount,
  1714. 'autoCashout': m.autoCash,
  1715. 'infinityCashout': false,
  1716. 'cashedOut': false,
  1717. 'profit': 0
  1718. };
  1719. }
  1720.  
  1721. if(m.autoCash == 0) usersCrash[user.steamid]['infinityCashout'] = true;
  1722.  
  1723. socket.emit('message', {
  1724. type: 'crbetconfirm',
  1725. bet: {
  1726. id: row3.insertId,
  1727. amount: m.amount,
  1728. autoCashout: m.autoCash
  1729. },
  1730. exec: (end.getTime()-start_time.getTime()).toFixed(3)
  1731. });
  1732.  
  1733. io.sockets.emit('message', {
  1734. type: 'crbet',
  1735. bet: {
  1736. id: row3.insertId,
  1737. amount: m.amount,
  1738. icon: user.avatar,
  1739. name: user.name,
  1740. level: levelA
  1741. }
  1742. });
  1743.  
  1744. betsCrash.push({
  1745. id: row3.insertId,
  1746. amount: m.amount,
  1747. autoCashout: m.autoCash,
  1748. icon: user.avatar,
  1749. name: user.name,
  1750. user: user.steamid,
  1751. level: levelA
  1752. });
  1753.  
  1754. logger.debug('Crash bet confirmed #'+row3.insertId+' | Amount: '+m.amount+' | AutoCashout: '+m.autoCash+' | User: '+pool.escape(user.steamid));
  1755.  
  1756. getBalance(user.steamid, socket);
  1757. });
  1758. });
  1759. } else {
  1760. socket.emit('message', {
  1761. type: 'error',
  1762. mtype: 'crash',
  1763. enable: true,
  1764. error: 'Error: You dont have any money!'
  1765. });
  1766. }
  1767. });
  1768. }
  1769.  
  1770. function crashCashout(m, user, socket) {
  1771. var crashPoint = pointCrash;
  1772. if(crashState != 'STARTED') {
  1773. socket.emit('message', {
  1774. type: 'error',
  1775. error: 'Error: The game is ended!'
  1776. });
  1777. return;
  1778. }
  1779.  
  1780. if(crashPoint <= 1.00) {
  1781. socket.emit('message', {
  1782. type: 'error',
  1783. error: 'Error: Invalid crash!'
  1784. });
  1785. return;
  1786. }
  1787.  
  1788. if(usersCrash[user.steamid]['cashedOut'] == false) {
  1789. var win = parseInt(usersCrash[user.steamid]['amount'] * parseFloat(crashPoint).toFixed(2));
  1790.  
  1791. io.sockets.emit('message', {
  1792. type: 'betCrashWin',
  1793. id: usersCrash[user.steamid]['id'],
  1794. cashout: (parseFloat(crashPoint).toFixed(2)),
  1795. profit: parseInt(win - usersCrash[user.steamid]['amount'])
  1796. });
  1797.  
  1798. usersCrash[user.steamid]['cashedOut'] = true;
  1799. usersCrash[user.steamid]['autoCashout'] = parseFloat(crashPoint).toFixed(2);
  1800. usersCrash[user.steamid]['profit'] = parseInt(win - usersCrash[user.steamid]['amount']);
  1801.  
  1802. socket.emit('message', {
  1803. type: 'btnCrashWin',
  1804. amount: win
  1805. });
  1806.  
  1807. query('UPDATE `users` SET `balance` = `balance` + '+parseInt(win)+' WHERE `steamid` = '+pool.escape(user.steamid), function(err){
  1808. query('UPDATE `crbets` SET `autoCashout` = '+parseFloat(crashPoint).toFixed(2)+', `cashedOut` = 1 WHERE `id` = '+pool.escape(usersCrash[user.steamid]['id']));
  1809.  
  1810. logger.debug('[CASHOUT] UPDATED BALANCE OF '+user.steamid+' WITH + '+parseInt(win - usersCrash[user.steamid]['amount'])+' [CASHOUT: '+parseFloat(crashPoint).toFixed(2)+'x]');
  1811. getBalance(user.steamid, socket);
  1812. });
  1813. }else {
  1814. socket.emit('message', {
  1815. type: 'error',
  1816. error: 'Error: You have already cashed out!'
  1817. });
  1818. }
  1819. }
  1820.  
  1821.  
  1822. function hashCrash() {
  1823. crashState = 'STARTING';
  1824. logger.debug('Starting crash!');
  1825.  
  1826. io.sockets.emit('message', {
  1827. type: 'resetCrash'
  1828. });
  1829.  
  1830. var startTimeCrash = waitStartingCrash;
  1831. var timerWaintingCrash = setInterval(function(){
  1832. if(startTimeCrash <= 0.01){
  1833. clearInterval(timerWaintingCrash);
  1834. }else{
  1835. io.sockets.emit('message', {
  1836. type: 'startingCrash',
  1837. time: ((startTimeCrash).toFixed(1))
  1838. });
  1839. startTimeCrash -= 0.1;
  1840. }
  1841. },100);
  1842.  
  1843. if(!riggedMode) {
  1844. var genGameHash = function(serverSeed) {
  1845. return crypto.createHash('sha256').update(serverSeed).digest('hex');
  1846. };
  1847. var serverSeed = makeCode();
  1848.  
  1849. hashCodeCrash = genGameHash(serverSeed);
  1850. secretCodeCrash = serverSeed;
  1851. lotteryCodeCrash = time();
  1852.  
  1853. var crashPointFromHash = function(serverSeed) {
  1854. var hash = crypto.createHmac('sha256', serverSeed).digest('hex');
  1855. var divisible = function divisible(hash, mod) {
  1856. var val = 0;
  1857. var o = hash.length % 4;
  1858. for (var i = o > 0 ? o - 4 : 0; i < hash.length; i += 4) {
  1859. val = ((val << 16) + parseInt(hash.substring(i, i+4), 16)) % mod;
  1860. }
  1861. return val === 0;
  1862. };
  1863. var INSTANT_CRASH_PERCENTAGE = 5;
  1864. if (divisible(hash, 100 / parseInt(INSTANT_CRASH_PERCENTAGE, 10)))
  1865. return 100;
  1866. var h = parseInt(hash.slice(0,52/4),16);
  1867. var e = Math.pow(2,52);
  1868. return Math.floor((100 * e - h) / (e - h));
  1869. };
  1870.  
  1871. crashAt = crashPointFromHash(serverSeed);
  1872.  
  1873. logger.debug('New crash: with crashPoint: ' + (crashAt / 100).toFixed(2) +'x');
  1874. }else if(riggedMode) {
  1875. crashAt = riggedValue;
  1876.  
  1877. riggedMode = false;
  1878. riggedValue = 0;
  1879.  
  1880. logger.debug('Crash seted: with crashPoint: ' + (crashAt / 100).toFixed(2) +'x');
  1881. }
  1882.  
  1883. setTimeout(function() {
  1884. startCrash();
  1885. }, (waitStartingCrash + 1) * 1000);
  1886. }
  1887.  
  1888. function startCrash(){
  1889. crashState = 'STARTED';
  1890.  
  1891. startCrashTime = new Date().getTime();
  1892.  
  1893. io.sockets.emit('message', {
  1894. type: 'startedCrash',
  1895. elapsed: new Date().getTime() - startCrashTime
  1896. });
  1897.  
  1898. function calcCrash1(ms) {
  1899. var gamePayout = Math.floor(100 * calcCrash2(ms)) / 100;
  1900. return gamePayout;
  1901. }
  1902.  
  1903. function calcCrash2(ms) {
  1904. var r = 0.00006;
  1905. return Math.pow(Math.E, r * ms);
  1906. }
  1907.  
  1908. timerIntCrash = setInterval(function(){
  1909. pointCrash = calcCrash1(new Date().getTime() - startCrashTime);
  1910. checkCrash();
  1911. },100);
  1912. }
  1913.  
  1914. function checkCrash(){
  1915. var point = pointCrash * 100;
  1916.  
  1917. if(betsCrash.length > 0){
  1918. betsCrash.forEach(function(bet){
  1919. if(usersCrash[bet.user]['cashedOut'] == false) {
  1920. var win = parseInt(usersCrash[bet.user]['amount'] * parseFloat(point / 100).toFixed(2));
  1921. io.sockets.emit('message', {
  1922. type: 'btnCrashCashout',
  1923. amount: win
  1924. });
  1925. }
  1926. });
  1927. }
  1928.  
  1929. if(point >= crashAt){
  1930. endedCrashTime = new Date().getTime() - startCrashTime;
  1931.  
  1932. crashState = 'ENDED';
  1933.  
  1934. io.sockets.emit('message', {
  1935. type: 'crashed',
  1936. number: crashAt,
  1937. time: endedCrashTime
  1938. });
  1939.  
  1940. if(betsCrash.length > 0){
  1941. betsCrash.forEach(function(bet){
  1942. if(usersCrash[bet.user]['cashedOut'] == false) {
  1943. io.sockets.emit('message', {
  1944. type: 'betCrashLose',
  1945. id: bet.id
  1946. });
  1947. }
  1948. });
  1949. }
  1950.  
  1951. usersCrash = {};
  1952. betsCrash = [];
  1953.  
  1954. query('INSERT INTO `crash` SET `crashAt` = '+parseFloat(crashAt / 100).toFixed(2)+', `lottery` = '+pool.escape(lotteryCodeCrash)+', `secret` = '+pool.escape(secretCodeCrash)+', `hash` = '+pool.escape(hashCodeCrash));
  1955.  
  1956. setTimeout(function() {
  1957. hashCrash();
  1958. }, 5000);
  1959.  
  1960. clearInterval(timerIntCrash);
  1961.  
  1962. logger.debug('Crash creshed at '+parseFloat(crashAt / 100).toFixed(2)+'x');
  1963. }else{
  1964. //CHECK AUTOCRASH
  1965. if(betsCrash.length > 0){
  1966. betsCrash.forEach(function(itm) {
  1967. if(usersCrash[itm.user]['cashedOut'] == false) {
  1968. if(usersCrash[itm.user]['infinityCashout'] == false){
  1969. if(usersCrash[itm.user]['autoCashout'] <= point){
  1970. var win = parseInt(usersCrash[itm.user]['amount'] * parseFloat(usersCrash[itm.user]['autoCashout'] / 100).toFixed(2));
  1971.  
  1972. io.sockets.emit('message', {
  1973. type: 'betCrashWin',
  1974. id: itm.id,
  1975. cashout: (parseFloat(usersCrash[itm.user]['autoCashout'] / 100).toFixed(2)),
  1976. profit: parseInt(win - usersCrash[itm.user]['amount'])
  1977. });
  1978.  
  1979. io.sockets.in(itm.user).emit('message', {
  1980. type: 'btnCrashWin',
  1981. amount: win
  1982. });
  1983.  
  1984. usersCrash[itm.user]['cashedOut'] = true;
  1985. usersCrash[itm.user]['profit'] = parseInt(win - usersCrash[itm.user]['amount']);
  1986.  
  1987. query('UPDATE `users` SET `balance` = `balance` + '+parseInt(win)+' WHERE `steamid` = '+pool.escape(itm.user), function(err){
  1988. if(err) {
  1989. logger.error(err);
  1990. return;
  1991. }
  1992.  
  1993. query('UPDATE `crbets` SET `autoCashout` = '+parseFloat(usersCrash[itm.user]['autoCashout'] / 100).toFixed(2)+', `cashedOut` = 1 WHERE `id` = '+pool.escape(usersCrash[itm.user]['id']));
  1994.  
  1995. logger.debug('[CASHOUT] UPDATED BALANCE OF '+itm.user+' WITH + '+(win - usersCrash[itm.user]['amount'])+' [CASHOUT: '+(usersCrash[itm.user]['autoCashout'] / 100)+'x]');
  1996. getBalance(itm.user, io.sockets.in(itm.user));
  1997. });
  1998. }
  1999. }
  2000. }
  2001. });
  2002. }
  2003. }
  2004. }
  2005. /* END CRASH */
  2006.  
  2007.  
  2008.  
  2009.  
  2010.  
  2011.  
  2012.  
  2013.  
  2014.  
  2015.  
  2016. /* JACKPOT */
  2017. var usersJPot = {};
  2018. var amountJPot = {};
  2019. var betsJPot = [];
  2020. var totalJPot = 0;
  2021. var btJPot = 5;
  2022. var currentlyTick = 0;
  2023.  
  2024. var widthJPot = 100; //do not modify
  2025. var stageJPot = 'WAIT';
  2026.  
  2027. var jackpotId = 0;
  2028. var lastWinnerJP = {name: 'None', steamid: 0, avatar: 'http://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/fe/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb.jpg', chance: 0, coins: 0};
  2029.  
  2030. function getAvatarsWin(avatar, bets, tickets){
  2031. var array = [];
  2032. var totalAvatars = 100;
  2033.  
  2034. for(var i = 0; i < totalAvatars; i++){
  2035. var randomAvatar = getRandomInt(1, tickets);
  2036.  
  2037. var avatarA;
  2038.  
  2039. if(bets.length > 0){
  2040. bets.forEach(function(itm){
  2041. if((randomAvatar >= itm.tick1) && (randomAvatar <= itm.tick2)){
  2042. avatarA = itm.avatar;
  2043. }
  2044. });
  2045. }
  2046.  
  2047. array.push(avatarA);
  2048. }
  2049. array[95] = avatar;
  2050.  
  2051. return array;
  2052. }
  2053.  
  2054. function joinJackpot(m, user, socket){
  2055. if(stageJPot == 'PICKING') {
  2056. socket.emit('message', {
  2057. type: 'error',
  2058. mtype: 'jackpot',
  2059. enable: true,
  2060. error: 'Error: Wait for preparing a new round!'
  2061. });
  2062. return;
  2063. }
  2064.  
  2065. if((usersJPot[user.steamid] !== undefined) && (usersJPot[user.steamid] == btJPot)) {
  2066. socket.emit('message', {
  2067. type: 'error',
  2068. mtype: 'jackpot',
  2069. enable: true,
  2070. error: 'Error: You\'ve already entered in this jackpot for '+btJPot+' times!'
  2071. });
  2072. return;
  2073. }
  2074.  
  2075. if((m.amount < minbet) || (m.amount > maxbet)) {
  2076. socket.emit('message', {
  2077. type: 'error',
  2078. mtype: 'jackpot',
  2079. enable: true,
  2080. error: 'Error: Invalid bet amount ['+minbet+'-'+maxbet+']!'
  2081. });
  2082. return;
  2083. }
  2084.  
  2085. if(/(a|b|c|d|e|f|g|h|j|i|k|l|m|n|o|p|q|r|s|t|v|u|w|x|y|z)/.exec(m.amount)) {
  2086. socket.emit('message', {
  2087. type: 'error',
  2088. mtype: 'jackpot',
  2089. enable: true,
  2090. error: 'Error: Invalid bet amount!'
  2091. });
  2092. logger.warn(user.steamid+' try to cheating to JACKPOT BET_AMOUNT');
  2093. return;
  2094. }
  2095.  
  2096. var start_time = new Date();
  2097. query('SELECT `balance`, `countDeposits` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err, row) {
  2098. if((err) || (!row.length)) {
  2099. logger.error('Failed to find DB');
  2100. logger.debug(err);
  2101. socket.emit('message', {
  2102. type: 'error',
  2103. mtype: 'jackpot',
  2104. enable: true,
  2105. error: 'Error: You are not DB!'
  2106. });
  2107. return;
  2108. }
  2109.  
  2110. if(row[0].balance >= m.amount) {
  2111. query('UPDATE `users` SET `balance` = `balance` - '+parseInt(m.amount)+' WHERE `steamid` = '+pool.escape(user.steamid), function(err2, row2) {
  2112. if(err2) {
  2113. logger.error('Error in withdraw');
  2114. logger.debug(err2);
  2115. socket.emit('message', {
  2116. type: 'error',
  2117. mtype: 'jackpot',
  2118. enable: true,
  2119. error: 'Error: You dont have enough points!'
  2120. });
  2121. return;
  2122. }
  2123.  
  2124. if(row[0].countDeposits >= 1) query('UPDATE `users` SET `available` = `available` + '+parseInt(m.amount / 3)+' WHERE `steamid` = '+pool.escape(user.steamid));
  2125. if(row[0].countDeposits >= 0) query('UPDATE `users` SET `bets` = `bets` + '+parseInt(m.amount)+' WHERE `steamid` = '+pool.escape(user.steamid));
  2126.  
  2127. if(usersJPot[user.steamid] === undefined){
  2128. usersJPot[user.steamid] = 1;
  2129. amountJPot[user.steamid] = m.amount;
  2130. }else{
  2131. usersJPot[user.steamid]++;
  2132. amountJPot[user.steamid] += m.amount;
  2133. }
  2134.  
  2135. totalJPot+=m.amount;
  2136.  
  2137. betsJPot.push({
  2138. user: user.steamid,
  2139. avatar: user.avatar,
  2140. name: user.name,
  2141. amount: m.amount,
  2142. tick1: (currentlyTick + 1),
  2143. tick2: (parseInt(m.amount / 10) + currentlyTick)
  2144. });
  2145.  
  2146. if(betsJPot.length > 0){
  2147. betsJPot.forEach(function(itm){
  2148. var change = parseFloat(100 * amountJPot[itm.user] / totalJPot).toFixed(2);
  2149.  
  2150. io.sockets.in(itm.user).emit('message', {
  2151. type: 'addChangeJPot',
  2152. change: change
  2153. });
  2154. });
  2155. }
  2156.  
  2157. socket.emit('message', {
  2158. type: 'betConfJPot',
  2159. amount: m.amount,
  2160. br: usersJPot[user.steamid],
  2161. tbr: btJPot
  2162. });
  2163.  
  2164. io.sockets.emit('message', {
  2165. type: 'addBetJPot',
  2166. bet: {
  2167. user: user.steamid,
  2168. avatar: user.avatar,
  2169. name: user.name,
  2170. amount: m.amount,
  2171. tick1: (currentlyTick + 1),
  2172. tick2: (parseInt(m.amount / 10) + currentlyTick)
  2173. },
  2174. total: totalJPot
  2175. });
  2176.  
  2177. currentlyTick = currentlyTick + parseInt(m.amount / 10);
  2178. startJPot();
  2179.  
  2180. logger.debug('Jackpot Bet confirmed Amount: '+m.amount+' | User: '+pool.escape(user.steamid));
  2181.  
  2182. getBalance(user.steamid, socket);
  2183. });
  2184. } else {
  2185. socket.emit('message', {
  2186. type: 'error',
  2187. mtype: 'jackpot',
  2188. enable: true,
  2189. error: 'Error: You dont have any money!'
  2190. });
  2191. }
  2192. });
  2193. }
  2194.  
  2195. var minusWJPot = (widthJPot/timeJPot).toFixed(2);
  2196.  
  2197. function startJPot(){
  2198. if(betsJPot.length >= 2 && Object.keys(usersJPot).length > 1){
  2199. if(stageJPot == 'WAIT'){
  2200. stageJPot = 'STARTED';
  2201. var timerJPot = timeJPot;
  2202.  
  2203. var intJPot = setInterval(function(){
  2204. if(timerJPot >= 0){
  2205. io.sockets.emit('message', {
  2206. type: 'setTimesJPot',
  2207. text: timerJPot+'s',
  2208. start: true,
  2209. width: widthJPot
  2210. });
  2211.  
  2212. widthJPot -= minusWJPot;
  2213. timerJPot--;
  2214. }else{
  2215. clearInterval(intJPot);
  2216. stageJPot = 'PICKING';
  2217.  
  2218. io.sockets.emit('message', {
  2219. type: 'setTimesJPot',
  2220. text: 'Picking winner!',
  2221. start: false
  2222. });
  2223.  
  2224. setTimeout(function(){
  2225. pickingWinnerJPot();
  2226. },4000);
  2227. }
  2228. }, 1000);
  2229. }
  2230. }
  2231. }
  2232.  
  2233. function pickingWinnerJPot(){
  2234. var nameWinner;
  2235. var steamidWinner;
  2236. var avatarWinner;
  2237.  
  2238. var winnerTick = getRandomInt(1, currentlyTick);
  2239.  
  2240. if(betsJPot.length > 0){
  2241. betsJPot.forEach(function(itm){
  2242. if((winnerTick >= itm.tick1) && (winnerTick <= itm.tick2)){
  2243. nameWinner = itm.name;
  2244. steamidWinner = itm.user;
  2245. avatarWinner = itm.avatar;
  2246. }
  2247. });
  2248. }
  2249.  
  2250. var arrayAvatars = getAvatarsWin(avatarWinner, betsJPot, currentlyTick);
  2251.  
  2252. io.sockets.emit('message', {
  2253. type: 'rollJackpot',
  2254. avatars: arrayAvatars
  2255. });
  2256.  
  2257. setTimeout(function(){
  2258. io.sockets.emit('message', {
  2259. type: 'setTimesJPot',
  2260. text: 'The winner is '+nameWinner+' ('+steamidWinner+') | Ticket: '+winnerTick+'!',
  2261. start: false
  2262. });
  2263.  
  2264. query('UPDATE `users` SET `balance`=`balance`+'+parseInt(totalJPot)+' WHERE `steamid`='+pool.escape(steamidWinner));
  2265. getBalance(steamidWinner, io.sockets.in(steamidWinner));
  2266.  
  2267. //ARRAY TOTAL PLAYERS, AMOUNTS AND TICKETS
  2268. var arrayPlayers = [];
  2269. var arrayAmounts = [];
  2270. var arrayTickets = [];
  2271.  
  2272. if(betsJPot.length > 0){
  2273. betsJPot.forEach(function(itm){
  2274. arrayPlayers.push(itm.user);
  2275. arrayAmounts.push(itm.amount);
  2276. arrayTickets.push(itm.tick1+'-'+itm.tick2);
  2277. });
  2278. }
  2279.  
  2280. arrayPlayers = arrayPlayers.join('/');
  2281. arrayAmounts = arrayAmounts.join('/');
  2282. arrayTickets = arrayTickets.join('/');
  2283.  
  2284. var chanceWin = parseFloat(100 * amountJPot[steamidWinner] / totalJPot).toFixed(2);
  2285.  
  2286. //ADD HISTORY JACKPOT
  2287. query('INSERT INTO `jackpot` SET `winner` = '+pool.escape(steamidWinner)+', `ticketwinner` = '+pool.escape(winnerTick)+', `chance` = '+pool.escape(chanceWin)+', `players` = '+pool.escape(arrayPlayers)+', `amounts` = '+pool.escape(arrayAmounts)+', `tickets` = '+pool.escape(arrayTickets)+', `hash` = '+pool.escape(getHash("JACKPOT", jackpotId))+', `amount` = '+pool.escape(totalJPot), function(err3, row3) {
  2288. if(err3) {
  2289. logger.error('Error in DB');
  2290. logger.debug(err);
  2291. return;
  2292. }
  2293.  
  2294. jackpotId = row3.insertId + 1;
  2295. });
  2296.  
  2297. io.sockets.in(steamidWinner).emit('message', {
  2298. type: 'alert',
  2299. alert: 'You won '+totalJPot+' at this jackpot with ticket '+winnerTick+'! Hash: '+terminatingHash
  2300. });
  2301.  
  2302. setTimeout(function(){
  2303. lastWinnerJP = {steamid: steamidWinner, name: nameWinner, avatar: avatarWinner, chance: chanceWin, coins: totalJPot};
  2304.  
  2305. stageJPot = 'WAIT';
  2306. widthJPot = 100;
  2307.  
  2308. usersJPot = {};
  2309. amountJPot = {};
  2310. betsJPot = [];
  2311. totalJPot = 0;
  2312. currentlyTick = 0;
  2313.  
  2314. io.sockets.emit('message', {
  2315. type: 'resetJPot'
  2316. });
  2317. io.sockets.emit('message', {
  2318. type: 'setTimesJPot',
  2319. text: 'Waiting for players...',
  2320. start: false
  2321. });
  2322. io.sockets.emit('message', {
  2323. type: 'lastWinnerJP',
  2324. last: lastWinnerJP
  2325. });
  2326. },5000);
  2327. },10300);
  2328. }
  2329. /* END JACKPOT */
  2330.  
  2331.  
  2332.  
  2333.  
  2334.  
  2335.  
  2336.  
  2337.  
  2338. /* GIVEAWAY */
  2339. var userJoin = {};
  2340. var usersEntered = [];
  2341. var giveawayState = 1;
  2342. var lastWinnerGiveaway = {steamid: 0, name: 'None', avatar: 'http://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/fe/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb.jpg'};
  2343. var timerGAWAY;
  2344. startGiveaway();
  2345.  
  2346. function startGiveaway() {
  2347. userJoin = {};
  2348. usersEntered = [];
  2349.  
  2350. giveawayState = 0;
  2351. logger.trace('Starting Giveaway');
  2352. timerGAWAY = timeGiveaway * 3600;
  2353.  
  2354. io.sockets.emit('message', {
  2355. type: 'timerGiveaway',
  2356. mod: 'timer',
  2357. time: timerGAWAY,
  2358. last: lastWinnerGiveaway
  2359. });
  2360.  
  2361. var timerGA = setInterval(function() {
  2362. if (timerGAWAY == -2) {
  2363. clearInterval(timerGA);
  2364.  
  2365. giveawayState = 1;
  2366. logger.trace('Pick Winner');
  2367. io.sockets.emit('message', {
  2368. type: 'timerGiveaway',
  2369. mod: 'else',
  2370. subiect: 'Picking Winner'
  2371. });
  2372.  
  2373. if(usersEntered.length > 0){
  2374. getWinnerGiveaway();
  2375. }else{
  2376. io.sockets.emit('message', {
  2377. type: 'timerGiveaway',
  2378. mod: 'else',
  2379. subiect: 'No players entered in giveaway'
  2380. });
  2381. setTimeout(function() {
  2382. startGiveaway();
  2383. }, 3000);
  2384. }
  2385. }
  2386. timerGAWAY--;
  2387. }, 1000);
  2388. }
  2389. function getWinnerGiveaway(){
  2390. var array = usersEntered[Math.floor(Math.random() * usersEntered.length)];
  2391. var nameWinner = array['name'];
  2392. var steamidWinner = array['user'];
  2393. var avatarWinner = array['avatar'];
  2394.  
  2395. setTimeout(function() {
  2396. logger.trace('The Winner Giveaway is '+nameWinner+' ('+steamidWinner+')');
  2397. lastWinnerGiveaway = {steamid: steamidWinner, name: nameWinner, avatar: avatarWinner};
  2398. query('UPDATE `users` SET `balance`=`balance` + '+parseInt(amountGiveaway)+' WHERE `steamid` = '+pool.escape(steamidWinner));
  2399.  
  2400. getBalance(steamidWinner, io.sockets.in(steamidWinner));
  2401.  
  2402. io.sockets.emit('message', {
  2403. type: 'timerGiveaway',
  2404. mod: 'winner',
  2405. subiect: {
  2406. name: nameWinner,
  2407. user: steamidWinner
  2408. }
  2409. });
  2410. query('INSERT INTO `giveaway` SET `winner` = '+pool.escape(steamidWinner)+', `name` = '+pool.escape(nameWinner)+', `hash` = '+pool.escape(getHash("GIVEAWAY", time()+nameWinner))+', `amount` = '+pool.escape(amountGiveaway), function(err3, row3) {
  2411. if(err3) {
  2412. logger.error('Error in DB');
  2413. logger.debug(err);
  2414. return;
  2415. }
  2416. });
  2417. setTimeout(function() {
  2418. io.sockets.emit('message', {
  2419. type: 'removeQGiveaway'
  2420. });
  2421. startGiveaway();
  2422. }, 7000);
  2423. }, 3000);
  2424. }
  2425. function joinInGiveaway(user, socket) {
  2426. if(giveawayState == 1) {
  2427. socket.emit('message', {
  2428. type: 'error',
  2429. enable: true,
  2430. error: 'Error: Wait for starting giweaway!'
  2431. });
  2432. return;
  2433. }
  2434. if((userJoin[user.steamid] !== undefined) && (userJoin[user.steamid] == 1)) {
  2435. socket.emit('message', {
  2436. type: 'error',
  2437. enable: true,
  2438. error: 'Error: You have already joined in giveawey!'
  2439. });
  2440. return;
  2441. }
  2442. if(userJoin[user.steamid] === undefined) {
  2443. userJoin[user.steamid] = 1;
  2444. }
  2445. io.sockets.emit('message', {
  2446. type: 'joinGiveaway',
  2447. player: {
  2448. avatar: user.avatar,
  2449. steamid: user.steamid,
  2450. name: user.name
  2451. }
  2452. });
  2453. usersEntered.push({
  2454. avatar: user.avatar,
  2455. name: user.name,
  2456. user: user.steamid
  2457. });
  2458. logger.debug('Join In Giveaway confirmed user: '+pool.escape(user.steamid));
  2459. }
  2460. /* END GIVEAWAY */
  2461.  
  2462.  
  2463.  
  2464.  
  2465.  
  2466.  
  2467.  
  2468.  
  2469.  
  2470.  
  2471. /* MINESWEEPER */
  2472. var usersMines = {};
  2473. var gamesMines = {};
  2474.  
  2475. function playMines(m, user, socket){
  2476. if((usersMines[user.steamid] !== undefined) && (usersMines[user.steamid] == 1)) {
  2477. socket.emit('message', {
  2478. type: 'error',
  2479. mtype: 'mines',
  2480. btype: 'play',
  2481. enable: true,
  2482. error: 'Error: You\'ve already started a game!'
  2483. });
  2484. return;
  2485. }
  2486.  
  2487. if((m.amount < minbet) || (m.amount > maxbet)) {
  2488. socket.emit('message', {
  2489. type: 'error',
  2490. mtype: 'mines',
  2491. btype: 'play',
  2492. enable: true,
  2493. error: 'Error: Invalid bet amount ['+minbet+'-'+maxbet+']!'
  2494. });
  2495. return;
  2496. }
  2497.  
  2498. if(m.bombs < 1 || m.bombs > 24) {
  2499. socket.emit('message', {
  2500. type: 'error',
  2501. mtype: 'mines',
  2502. btype: 'play',
  2503. enable: true,
  2504. error: 'Error: Invalid bombs amount [1-24]!'
  2505. });
  2506. logger.warn(user.steamid+' try to cheating to MINESWEEPER BOMBS_AMOUNT_1');
  2507. return;
  2508. }
  2509.  
  2510. if(/(a|b|c|d|e|f|g|h|j|i|k|l|m|n|o|p|q|r|s|t|v|u|w|x|y|z)/.exec(m.amount)) {
  2511. socket.emit('message', {
  2512. type: 'error',
  2513. mtype: 'mines',
  2514. btype: 'play',
  2515. enable: true,
  2516. error: 'Error: Invalid bet amount!'
  2517. });
  2518. logger.warn(user.steamid+' try to cheating to MINESWEEPER BET_AMOUNT');
  2519. return;
  2520. }
  2521.  
  2522. if(/(a|b|c|d|e|f|g|h|j|i|k|l|m|n|o|p|q|r|s|t|v|u|w|x|y|z)/.exec(m.bombs)) {
  2523. socket.emit('message', {
  2524. type: 'error',
  2525. mtype: 'mines',
  2526. btype: 'play',
  2527. enable: true,
  2528. error: 'Error: Invalid bombs amount!'
  2529. });
  2530. logger.warn(user.steamid+' try to cheating to MINESWEEPER BOMBS_AMOUNT_2');
  2531. return;
  2532. }
  2533.  
  2534. var start_time = new Date();
  2535. query('SELECT `balance`, `countDeposits` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err, row) {
  2536. if((err) || (!row.length)) {
  2537. logger.error('Failed to find DB');
  2538. logger.debug(err);
  2539. socket.emit('message', {
  2540. type: 'error',
  2541. mtype: 'mines',
  2542. btype: 'play',
  2543. enable: true,
  2544. error: 'Error: You are not DB!'
  2545. });
  2546. return;
  2547. }
  2548.  
  2549. if(row[0].balance >= m.amount) {
  2550. query('UPDATE `users` SET `balance` = `balance` - '+parseInt(m.amount)+' WHERE `steamid` = '+pool.escape(user.steamid), function(err2, row2) {
  2551. if(err2) {
  2552. logger.error('Error in withdraw');
  2553. logger.debug(err2);
  2554. socket.emit('message', {
  2555. type: 'error',
  2556. mtype: 'mines',
  2557. btype: 'play',
  2558. enable: true,
  2559. error: 'Error: You dont have enough points!'
  2560. });
  2561. return;
  2562. }
  2563.  
  2564. if(row[0].countDeposits >= 1) query('UPDATE `users` SET `available` = `available` + '+parseInt(m.amount / 3)+' WHERE `steamid` = '+pool.escape(user.steamid));
  2565. if(row[0].countDeposits >= 0) query('UPDATE `users` SET `bets` = `bets` + '+parseInt(m.amount)+' WHERE `steamid` = '+pool.escape(user.steamid));
  2566.  
  2567. query('INSERT INTO `minesbets` SET `user` = '+pool.escape(user.steamid)+', `amount` = '+pool.escape(m.amount)+', `amountBombs` = '+pool.escape(m.bombs), function(err3, row3) {
  2568. if(err3) {
  2569. logger.error('Error in DB');
  2570. logger.debug(err);
  2571. return;
  2572. }
  2573.  
  2574. usersMines[user.steamid] = 1;
  2575.  
  2576. gamesMines[user.steamid] = {
  2577. bombs: m.bombs,
  2578. amount: m.amount,
  2579. amountWin: m.amount,
  2580. bombsWin: [],
  2581. sums: getArraySums(parseInt((m.amount * m.bombs) / (25 - m.bombs)), (25 - m.bombs)),
  2582. bombsLose: getArrayBombs(m.bombs),
  2583. cashout: false,
  2584. lose: false,
  2585. id: row3.insertId
  2586. };
  2587.  
  2588. if (gamesMines[user.steamid]['sums'][0] > 100000) {
  2589. gamesMines[user.steamid]['amountWin'] = 0;
  2590. socket.emit('message', {
  2591. type: 'newMines',
  2592. stake: '0',
  2593. next: '0',
  2594. });
  2595. }
  2596.  
  2597. socket.emit('message', {
  2598. type: 'newMines',
  2599. stake: gamesMines[user.steamid]['amountWin'],
  2600. next: gamesMines[user.steamid]['sums'][0],
  2601. });
  2602.  
  2603. logger.debug('Mines Bet confirmed #'+row3.insertId+' | Amount: '+m.amount+' | Bombs: '+m.bombs+' | User: '+pool.escape(user.steamid));
  2604.  
  2605. getBalance(user.steamid, socket);
  2606. });
  2607. });
  2608. } else {
  2609. socket.emit('message', {
  2610. type: 'error',
  2611. mtype: 'mines',
  2612. btype: 'play',
  2613. enable: true,
  2614. error: 'Error: You dont have any money!'
  2615. });
  2616. }
  2617. });
  2618. }
  2619.  
  2620. function cashoutMines(user, socket){
  2621. if(gamesMines[user.steamid]['cashout']){
  2622. socket.emit('message', {
  2623. type: 'error',
  2624. mtype: 'mines',
  2625. btype: 'cashout',
  2626. enable: true,
  2627. error: 'Error: The already cashout!'
  2628. });
  2629. return;
  2630. }
  2631.  
  2632. if(gamesMines[user.steamid]['lose']){
  2633. socket.emit('message', {
  2634. type: 'error',
  2635. mtype: 'mines',
  2636. btype: 'cashout',
  2637. enable: true,
  2638. error: 'Error: The game is already ended!'
  2639. });
  2640. return;
  2641. }
  2642.  
  2643. if(gamesMines[user.steamid]['bombsWin'].length == 0){
  2644. socket.emit('message', {
  2645. type: 'error',
  2646. mtype: 'mines',
  2647. btype: 'cashout',
  2648. enable: true,
  2649. error: 'Error: You need to play one time to withdraw your winnings!'
  2650. });
  2651. return;
  2652. }
  2653.  
  2654. query('UPDATE `users` SET `balance` = `balance` + '+parseInt(gamesMines[user.steamid]['amountWin'])+' WHERE `steamid` = '+pool.escape(user.steamid), function(err, row) {
  2655. if(err) {
  2656. logger.error('Error in withdraw');
  2657. logger.debug(err);
  2658. socket.emit('message', {
  2659. type: 'error',
  2660. mtype: 'mines',
  2661. btype: 'cashout',
  2662. enable: true,
  2663. error: 'Error: You dont have enough points!'
  2664. });
  2665. return;
  2666. }
  2667.  
  2668. socket.emit('message', {
  2669. type: 'cashoutMines'
  2670. });
  2671.  
  2672. socket.emit('message', {
  2673. type: 'getBomb',
  2674. mtype: 'lose',
  2675. buttons: gamesMines[user.steamid]['bombsLose']
  2676. });
  2677.  
  2678. query('UPDATE `minesbets` SET `bombsWin` = '+pool.escape(gamesMines[user.steamid]['bombsWin'].join('/'))+', `bombsLose` ='+pool.escape(gamesMines[user.steamid]['bombsLose'].join('/'))+', `enable` = 1, `win` = '+parseInt(gamesMines[user.steamid]['amountWin'])+', `hash` = '+pool.escape(getHash("MINESWEEPER", gamesMines[user.steamid]['id']))+' WHERE `id` = '+pool.escape(gamesMines[user.steamid]['id']));
  2679.  
  2680. usersMines[user.steamid] = 0;
  2681. gamesMines[user.steamid]['cashout'] = true;
  2682. gamesMines[user.steamid]['amountWin'] = 0;
  2683.  
  2684. getBalance(user.steamid, socket);
  2685. });
  2686.  
  2687. io.sockets.emit('message', {
  2688. type: 'refMines'
  2689. });
  2690. }
  2691.  
  2692. function getBombMines(m, user, socket){
  2693. if((usersMines[user.steamid] == undefined) || (usersMines[user.steamid] == 0)) {
  2694. socket.emit('message', {
  2695. type: 'error',
  2696. mtype: 'mines',
  2697. btype: 'bombs',
  2698. bomb: m.bomb,
  2699. enable: true,
  2700. error: 'Error: The game is not started!'
  2701. });
  2702. return;
  2703. }
  2704.  
  2705. if(gamesMines[user.steamid]['lose']){
  2706. socket.emit('message', {
  2707. type: 'error',
  2708. mtype: 'mines',
  2709. btype: 'bombs',
  2710. bomb: m.bomb,
  2711. enable: true,
  2712. error: 'Error: The game is ended!'
  2713. });
  2714. return;
  2715. }
  2716.  
  2717. if(/(a|b|c|d|e|f|g|h|j|i|k|l|m|n|o|p|q|r|s|t|v|u|w|x|y|z)/.exec(m.bomb)) {
  2718. socket.emit('message', {
  2719. type: 'error',
  2720. mtype: 'mines',
  2721. btype: 'bombs',
  2722. bomb: m.bomb,
  2723. enable: true,
  2724. error: 'Error: Invalid bomb!'
  2725. });
  2726. logger.warn(user.steamid+' try to cheating to MINESWEEPER PRESBOMB_1');
  2727. return;
  2728. }
  2729.  
  2730. if(m.bomb < 1 || m.bomb > 25) {
  2731. logger.warn(user.steamid+' try to cheating to MINESWEEPER PRESBOMB_2');
  2732. return;
  2733. }
  2734.  
  2735. for(var x = 0; x <= gamesMines[user.steamid]['bombsWin'].length; x++){
  2736. if(gamesMines[user.steamid]['bombsWin'][x] == m.bomb){
  2737. socket.emit('message', {
  2738. type: 'error',
  2739. mtype: 'mines',
  2740. btype: 'bombs',
  2741. bomb: m.bomb,
  2742. enable: true,
  2743. error: 'Error: You already pressed this button!'
  2744. });
  2745. return;
  2746. }
  2747. }
  2748.  
  2749. var bombWin = false;
  2750. for(var y = 0; y <= gamesMines[user.steamid]['bombsLose'].length; y++){
  2751. if(gamesMines[user.steamid]['bombsLose'][y] == m.bomb) bombWin = true;
  2752. }
  2753. var sumWin = gamesMines[user.steamid]['sums'][gamesMines[user.steamid]['bombsWin'].length];
  2754.  
  2755. if(bombWin){
  2756. gamesMines[user.steamid]['lose'] = true;
  2757. gamesMines[user.steamid]['amountWin'] = 0;
  2758. usersMines[user.steamid] = 0;
  2759. socket.emit('message', {
  2760. type: 'getBomb',
  2761. mtype: 'lose',
  2762. buttons: gamesMines[user.steamid]['bombsLose']
  2763. });
  2764.  
  2765. var crypto = require('crypto');
  2766. var serverSeed = 'MINES'+gamesMines[user.steamid]['id'];
  2767. var genGameHash = function(serverSeed) {
  2768. return crypto.createHash('sha256').update(serverSeed).digest('hex');
  2769. };
  2770. var terminatingHash = genGameHash(serverSeed);
  2771.  
  2772. query('UPDATE `minesbets` SET `bombDefuse` = '+m.bomb+', `bombsWin` = '+pool.escape(gamesMines[user.steamid]['bombsWin'].join('/'))+', `bombsLose` ='+pool.escape(gamesMines[user.steamid]['bombsLose'].join('/'))+', `enable` = 1, `hash` = '+pool.escape(terminatingHash)+' WHERE `id` = '+pool.escape(gamesMines[user.steamid]['id']));
  2773.  
  2774. io.sockets.emit('message', {
  2775. type: 'refMines'
  2776. });
  2777. }else{
  2778. gamesMines[user.steamid]['bombsWin'].push(m.bomb);
  2779. gamesMines[user.steamid]['amountWin'] += sumWin
  2780. socket.emit('message', {
  2781. type: 'getBomb',
  2782. mtype: 'win',
  2783. buttons: m.bomb,
  2784. stake: gamesMines[user.steamid]['amountWin'],
  2785. next: gamesMines[user.steamid]['sums'][gamesMines[user.steamid]['bombsWin'].length],
  2786. amount: sumWin,
  2787. new: true
  2788. });
  2789. }
  2790. }
  2791.  
  2792. function getArraySums(sum, bombs){
  2793. var array = [];
  2794. var cSums = 0
  2795. while(cSums < bombs){
  2796. array.push(sum);
  2797. cSums++;
  2798. }
  2799.  
  2800. var xSum = parseInt(sum / array.length);
  2801.  
  2802. for(var i = 0; i < array.length; i++){
  2803. if(i <= parseInt(array.length / 2)){
  2804. array[i] -= (xSum * (parseInt(array.length / 2) - i));
  2805. }else{
  2806. array[i] += (xSum * (i - parseInt(array.length / 2)));
  2807. }
  2808. }
  2809. return array;
  2810. }
  2811.  
  2812. function getArrayBombs(bombs){
  2813. var totalBombs = bombs
  2814. var cBomb = 0;
  2815. var array = [];
  2816. while(cBomb < totalBombs){
  2817. array.push(getNRRR());
  2818. cBomb++;
  2819. }
  2820. function getNRRR(){
  2821. var nr = getRandomInt(1, 25);
  2822. var i;
  2823. for(i = 0;i <= array.length;i++){
  2824. if(array[i] == nr) return getNRRR();
  2825. }
  2826. return nr;
  2827. }
  2828. return array;
  2829. }
  2830. /* END MINESWEEPER */
  2831.  
  2832.  
  2833.  
  2834.  
  2835.  
  2836.  
  2837.  
  2838.  
  2839.  
  2840.  
  2841.  
  2842.  
  2843. /* ROULETTE */
  2844. var accept = timerRoulette + 1; //WAIT TIME
  2845. var wait = 10; //ROLLING TIME
  2846. var br = 3;
  2847. var q1 = 2;
  2848. var q2 = 14;
  2849. var timer = -1;
  2850. var users = {};
  2851. var roll = 0;
  2852. var currentBets = [];
  2853. var historyRolls = [];
  2854. var historyRolls100 = [];
  2855. var usersBr = {};
  2856. var usersAmount = {};
  2857. var currentSums = {
  2858. '0-0': 0,
  2859. '1-7': 0,
  2860. '8-14': 0
  2861. };
  2862. var roundedHash = null;
  2863. var currentRollid = 0;
  2864. var pause = false;
  2865. var hash = '';
  2866. var countRLogs = 0;
  2867. var sh = '';
  2868.  
  2869. loadHistory();
  2870. checkTimer();
  2871.  
  2872. function setBet(m, user, socket) {
  2873. var betColor;
  2874.  
  2875. if((usersBr[user.steamid] !== undefined) && (usersBr[user.steamid] == br)) {
  2876. socket.emit('message', {
  2877. type: 'error',
  2878. mtype: 'roulette',
  2879. enable: true,
  2880. error: 'Error: You\'ve already placed '+usersBr[user.steamid]+'/'+br+' bets this roll!'
  2881. });
  2882. return;
  2883. }
  2884.  
  2885. if((m.amount < minbet) || (m.amount > maxbet)) {
  2886. socket.emit('message', {
  2887. type: 'error',
  2888. mtype: 'roulette',
  2889. enable: true,
  2890. error: 'Error: Invalid bet amount ['+minbet+'-'+maxbet+']!'
  2891. });
  2892. return;
  2893. }
  2894.  
  2895. if(m.lower == 1 && m.upper == 7) {
  2896. betColor = 'red';
  2897. }else if(m.lower == 8 && m.upper == 14) {
  2898. betColor = 'black'
  2899. }else if(m.lower == 0 && m.upper == 0) {
  2900. betColor = 'green';
  2901. }else {
  2902. logger.warn(user.steamid+' try to cheating to ROULETTE COLOR');
  2903. return;
  2904. }
  2905.  
  2906. if(/(a|b|c|d|e|f|g|h|j|i|k|l|m|n|o|p|q|r|s|t|v|u|w|x|y|z)/.exec(m.amount)) {
  2907. socket.emit('message', {
  2908. type: 'error',
  2909. mtype: 'roulette',
  2910. enable: true,
  2911. error: 'Error: Invalid bet amount!'
  2912. });
  2913. logger.warn(user.steamid+' try to cheating to ROULETTE BET_AMOUNT');
  2914. return;
  2915. }
  2916.  
  2917. if(pause) {
  2918. socket.emit('message', {
  2919. type: 'error',
  2920. enable: false,
  2921. error: 'Error: Betting for this round is closed!'
  2922. });
  2923. return;
  2924. }
  2925.  
  2926. var start_time = new Date();
  2927. query('SELECT `balance`, `countDeposits`, `bets` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err, row) {
  2928. if((err) || (!row.length)) {
  2929. logger.error('Failed to find DB');
  2930. logger.debug(err);
  2931. socket.emit('message', {
  2932. type: 'error',
  2933. mtype: 'roulette',
  2934. enable: true,
  2935. error: 'Error: You are not DB!'
  2936. });
  2937. return;
  2938. }
  2939.  
  2940. var n = parseFloat(row[0].bets % Math.pow(10, 3));
  2941. var xx = ((parseInt((row[0].bets - n)/xpPerLevel))*xpPerLevel);
  2942. var levelA = xx/xpPerLevel;
  2943.  
  2944. if(row[0].balance >= m.amount) {
  2945. query('UPDATE `users` SET `balance` = `balance` - '+parseInt(m.amount)+' WHERE `steamid` = '+pool.escape(user.steamid), function(err2, row2) {
  2946. if(err2) {
  2947. logger.error('Error in withdraw');
  2948. logger.debug(err2);
  2949. socket.emit('message', {
  2950. type: 'error',
  2951. mtype: 'roulette',
  2952. enable: true,
  2953. error: 'Error: You dont have enough points!'
  2954. });
  2955. return;
  2956. }
  2957.  
  2958. if(row[0].countDeposits >= 1) query('UPDATE `users` SET `available` = `available` + '+parseInt(m.amount / 3)+' WHERE `steamid` = '+pool.escape(user.steamid));
  2959. if(row[0].countDeposits >= 0) query('UPDATE `users` SET `bets` = `bets` + '+parseInt(m.amount)+' WHERE `steamid` = '+pool.escape(user.steamid));
  2960.  
  2961. query('INSERT INTO `bets` SET `user` = '+pool.escape(user.steamid)+', `amount` = '+pool.escape(m.amount)+', `lower` = '+pool.escape(m.lower)+', `upper` = '+pool.escape(m.upper), function(err3, row3) {
  2962. if(err3) {
  2963. logger.error('Error in DB');
  2964. logger.debug(err3);
  2965. return;
  2966. }
  2967. var end = new Date();
  2968. if(usersBr[user.steamid] === undefined) {
  2969. usersBr[user.steamid] = 1;
  2970. } else {
  2971. usersBr[user.steamid]++;
  2972. }
  2973. if(usersAmount[user.steamid] === undefined) {
  2974. usersAmount[user.steamid] = {
  2975. '0-0': 0,
  2976. '1-7': 0,
  2977. '8-14': 0
  2978. };
  2979. }
  2980. usersAmount[user.steamid][m.lower+'-'+m.upper] += parseInt(m.amount);
  2981. currentSums[m.lower+'-'+m.upper] += m.amount;
  2982. socket.emit('message', {
  2983. type: 'betconfirm',
  2984. bet: {
  2985. betid: row3.insertId,
  2986. lower: m.lower,
  2987. upper: m.upper,
  2988. amount: usersAmount[user.steamid][m.lower+'-'+m.upper]
  2989. },
  2990. mybr: usersBr[user.steamid],
  2991. br: br,
  2992. exec: (end.getTime()-start_time.getTime()).toFixed(3)
  2993. });
  2994. users[user.steamid].balance = row[0].balance-m.amount;
  2995. io.sockets.emit('message', {
  2996. type: 'bet',
  2997. bet: {
  2998. level: levelA,
  2999. amount: m.amount,
  3000. betid: row3.insertId,
  3001. icon: user.avatar,
  3002. lower: m.lower,
  3003. name: user.name,
  3004. upper: m.upper,
  3005. user: user.steamid,
  3006. won: null
  3007. },
  3008. sums: {
  3009. 0: currentSums['0-0'],
  3010. 1: currentSums['1-7'],
  3011. 2: currentSums['8-14']
  3012. }
  3013. });
  3014. currentBets.push({
  3015. amount: m.amount,
  3016. betid: row3.insertId,
  3017. icon: user.avatar,
  3018. lower: m.lower,
  3019. upper: m.upper,
  3020. name: user.name,
  3021. user: user.steamid,
  3022. level: levelA
  3023. });
  3024.  
  3025. logger.debug('Bet #'+row3.insertId+' with amount: '+m.amount);
  3026.  
  3027. getBalance(user.steamid, socket);
  3028. });
  3029. });
  3030. } else {
  3031. socket.emit('message', {
  3032. type: 'error',
  3033. mtype: 'roulette',
  3034. enable: true,
  3035. error: 'Error: You dont have any money!'
  3036. });
  3037. }
  3038. });
  3039. }
  3040. function checkTimer() {
  3041. if((timer == -1) && (!pause)) {
  3042. logger.trace('Starting roulette');
  3043. timer = accept+wait;
  3044.  
  3045. sh = sha256('CSGOWitch69' + time() + '-' + Math.floor(Math.random() * (690 - 1 + 1)) + 1);
  3046. roundedHash = sh;
  3047.  
  3048. timerID = setInterval(function() {
  3049. if((timer-wait)%5 == 0 && timer-wait >= 0) {
  3050. logger.trace('Timer roulette: '+(timer-wait)+'!');
  3051. }
  3052.  
  3053. if(timer-wait >= 0){
  3054. io.sockets.emit('message', {
  3055. type: 'timeRoulette',
  3056. time: timer-wait
  3057. });
  3058. }
  3059.  
  3060. if (timer == wait) {
  3061. pause = true;
  3062. logger.trace('Rolling roulette!');
  3063.  
  3064.  
  3065. }
  3066.  
  3067. if (timer == wait-2) {
  3068. toWin();
  3069. }
  3070.  
  3071. if(timer == 0) {
  3072. logger.trace('New round to roullete!');
  3073.  
  3074. sh = sha256('CSGOWitch69' + time() + '-' + Math.floor(Math.random() * (690 - 1 + 1)) + 1);
  3075. roundedHash = sh;
  3076.  
  3077. io.sockets.emit('message', {
  3078. type: 'roundedHash',
  3079. roundedHash: roundedHash
  3080. });
  3081.  
  3082. historyRolls.push({id: currentRollid, roll: roll});
  3083. if(historyRolls.length > 10) historyRolls.slice(1);
  3084.  
  3085. historyRolls100.push(roll);
  3086. if(historyRolls100.length > 100) historyRolls100.shift();
  3087.  
  3088. io.sockets.emit('message', {
  3089. type: '100rolls',
  3090. rolls: historyRolls100
  3091. });
  3092.  
  3093. timer = accept+wait;
  3094. currentBets = [];
  3095. usersBr = {};
  3096. usersAmount = {};
  3097. currentSums = {
  3098. '0-0': 0,
  3099. '1-7': 0,
  3100. '8-14': 0
  3101. };
  3102. pause = false;
  3103. }
  3104. timer--;
  3105. }, 1000);
  3106. }
  3107. }
  3108.  
  3109. function toWin() {
  3110. var lottery = time();
  3111. var secret = makeCode();
  3112.  
  3113. roll = getRoll(sh, secret, lottery);
  3114.  
  3115. logger.trace('[Roulette] --> Round hash: ' + sh + ', Lottery: ' + lottery + ', Secret: ' + secret + ', Rolling: ' + roll);
  3116.  
  3117. io.sockets.emit('message', {
  3118. type: 'roundedSecret',
  3119. roundedSecret: secret
  3120. });
  3121.  
  3122. query('INSERT INTO `rolls` SET `roll` = '+pool.escape(roll)+', `hash` = '+pool.escape(sh)+', `secret` = '+pool.escape(secret)+', `lottery` = '+pool.escape(lottery), function(err, row){
  3123. currentRollid = row.insertId;
  3124.  
  3125. var r = '';
  3126. var s = 0;
  3127. var wins = {
  3128. '0-0': 0,
  3129. '1-7': 0,
  3130. '8-14': 0
  3131. };
  3132. if(roll == 0) {
  3133. r = '0-0';
  3134. s = q2;
  3135. wins['0-0'] = currentSums['0-0']*s;
  3136. }
  3137. if((roll > 0) && (roll < 8)) {
  3138. r = '1-7';
  3139. s = q1;
  3140. wins['1-7'] = currentSums['1-7']*s;
  3141. }
  3142. if((roll > 7) && (roll < 15)) {
  3143. r = '8-14';
  3144. s = q1;
  3145. wins['8-14'] = currentSums['8-14']*s;
  3146. }
  3147.  
  3148. for(key in users) {
  3149. if(usersAmount[key] === undefined) {
  3150. var balance = null;
  3151. var won = 0;
  3152. } else {
  3153. var balance = parseInt(users[key].balance)+usersAmount[key][r]*s;
  3154. var won = usersAmount[key][r]*s;
  3155. }
  3156. if (io.sockets.connected[users[key].socket]) {
  3157. io.sockets.connected[users[key].socket].emit('message', {
  3158. balance: balance,
  3159. nets: [{
  3160. lower: 0,
  3161. samount: currentSums['0-0'],
  3162. swon: wins['0-0'],
  3163. upper: 0
  3164. }, {
  3165. lower: 1,
  3166. samount: currentSums['1-7'],
  3167. swon: wins['1-7'],
  3168. upper: 7
  3169. }, {
  3170. lower: 8,
  3171. samount: currentSums['8-14'],
  3172. swon: wins['8-14'],
  3173. upper: 14
  3174. }
  3175. ],
  3176. roll: roll,
  3177. rollid: currentRollid,
  3178. type: "roll",
  3179. wait: wait-2,
  3180. won: won
  3181. });
  3182. }
  3183. }
  3184. if(currentBets.length > 0){
  3185. currentBets.forEach(function(itm) {
  3186. if((roll >= itm.lower) && (roll <= itm.upper)) {
  3187. logger.debug('Bet id #'+itm.betid+' amount '+itm.amount+' win '+(itm.amount*s)+'(x'+s+');');
  3188. query('UPDATE `users` SET `balance` = `balance` + '+itm.amount*s+' WHERE `steamid` = '+pool.escape(itm.user));
  3189. users[itm.user].balance += itm.amount*s;
  3190. }
  3191. });
  3192. }
  3193. });
  3194. }
  3195.  
  3196. function loadHistory() {
  3197. query('SELECT * FROM `rolls` ORDER BY `id` DESC LIMIT 10', function(err, row) {
  3198. if(err) {
  3199. logger.error('Cant load betting history - 10 bets');
  3200. logger.debug(err);
  3201. }
  3202. logger.trace('Sucesfully updated history');
  3203. for(var i = row.length - 1; i >= 0; i--){
  3204. historyRolls.push(row[i]);
  3205. }
  3206. });
  3207. query('SELECT * FROM `rolls` ORDER BY `id` DESC LIMIT 100', function(err, row) {
  3208. if(err) {
  3209. logger.error('Cant load betting history - 100 bets');
  3210. logger.debug(err);
  3211. }
  3212. for(var i = row.length - 1; i >= 0; i--){
  3213. historyRolls100.push(row[i].roll);
  3214. }
  3215. });
  3216. }
  3217. /* END ROULETTE */
  3218.  
  3219.  
  3220.  
  3221.  
  3222. /* BOTS*/
  3223.  
  3224.  
  3225. function addBots() {
  3226. IntervalBetuireBoti = setInterval(function () {
  3227. if(CurrentTimesForBotsToBet != TimesForBotsToBet) {
  3228. setBetBots();
  3229. setBetBots();
  3230. CurrentTimesForBotsToBet;
  3231. }
  3232. }, IntervalDeBetuireBoti);
  3233. }
  3234.  
  3235. function ChatsBots() {
  3236. IntervalChatBotii = setInterval(function () {
  3237. addChatBots();
  3238. addChatBots();
  3239. }, TimeOfBotsChatting);
  3240. }
  3241.  
  3242. function addChatBots() {
  3243. var botID = Math.floor(Math.random() * (20 - 1 + 1)) + 1;
  3244.  
  3245. var Messages = ["Hello, dudes! All in green.", "Fuck this website, I lost all!", "omfggggg...", "that was almost dudeeee", "no way, I am giving up!", "Hello? I will win.", "ezzz", "idinahuij", "kurwa site dah", "omgggg", "scam site reported i lost allz my coins", "omfgg, who is the owner. iwant items back...", "I can predict all!!", "Red now!!!", "Blackkkkk", "black 9/2", "izi pizi green", "nooooooo", "fuckkk my life", "Moderator ban me pls, I hate this website", "omfggg, are you idiot!?!","what the fuck|?!!", "ggez I am god!!", " No problem my friend."];
  3246.  
  3247. pickBot(botID);
  3248.  
  3249. var STEAMID = 1337+botID;
  3250. var RandomMessage = Math.floor(Math.random() * (Messages.length - 1 + 1)) + 1;
  3251.  
  3252. io.sockets.emit('message', {
  3253. type: 'chat',
  3254. msg: Messages[RandomMessage],
  3255. name: BotBetName,
  3256. icon: BotBetAvatar,
  3257. user: '',
  3258. rank: '0',
  3259. verify: '0',
  3260. lang: '1',
  3261. hide: '1'
  3262. });
  3263. }
  3264.  
  3265. function pickBot(botID){
  3266. if(botID == 1) {
  3267. BotBetName = "AlexCRZ";
  3268. BotBetAvatar = "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/13/13641a9fc24377a85b18f0b0d56e04cdb75a1715.jpg";
  3269. }else if(botID == 2) {
  3270. BotBetName = "mARIO";
  3271. BotBetAvatar = "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/6f/6fc1b305a307efc12fc6a2f9b18c1fd4510b5684.jpg";
  3272. }else if(botID == 3) {
  3273. BotBetName = "KennyS"
  3274. BotBetAvatar = "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/ad/ad4729c5155426dbda96603113c2b35770f8ed48.jpg";
  3275. }else if(botID == 4) {
  3276. BotBetName = "FigarooOS";
  3277. BotBetAvatar = "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/8e/8ec6eb5e66ee0b1bca7eed597bc1ad73f9c499fb.jpg";
  3278. }else if(botID == 5) {
  3279. BotBetName = "Afanasi";
  3280. BotBetAvatar = "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/a6/a6c5e3e856d4b8313a6ea19d4c7771da68d7abda.jpg";
  3281. }else if(botID == 6) {
  3282. BotBetName = "AnomaliCR";
  3283. BotBetAvatar = "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/34/345a94183ba1f34903b5df7fe26156af0002f754.jpg";
  3284. }else if(botID == 7) {
  3285. BotBetName = "CZArina";
  3286. BotBetAvatar = "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/3c/3c75462f4636237febefa17eceda3d9a8a90389d.jpg";
  3287. }else if(botID == 8) {
  3288. BotBetName = "Egorr";
  3289. BotBetAvatar = "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/75/75a3407bcdc1ddf3075afc5b6b462b15e7dada1a.jpg";
  3290. }else if(botID == 9) {
  3291. BotBetName = "Fabii";
  3292. BotBetAvatar = "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/be/be7f486e6b6c793c52e4b8b6d931a4446e40d71f.jpg";
  3293. }else if(botID == 10) {
  3294. BotBetName = "Isidor";
  3295. BotBetAvatar = "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/f7/f72df2f71afb5c78340bc8866654e5068f322058.jpg";
  3296. }else if(botID == 11) {
  3297. BotBetName = "Parse";
  3298. BotBetAvatar = "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/9c/9c40f22a8e697192d26b3cd87fad97007a58f345.jpg";
  3299. }else if(botID == 12) {
  3300. BotBetName = "Kiska";
  3301. BotBetAvatar = "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/6d/6dc7e194419cc4445e569c343036d0c676832de7.jpg";
  3302. }else if(botID == 13) {
  3303. BotBetName = "Lila";
  3304. BotBetAvatar = "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/09/099eb9d4f33acaf7da0cc36f395cc076f6a44070.jpg";
  3305. }else if(botID == 14) {
  3306. BotBetName = "Ionutz";
  3307. BotBetAvatar = "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/fe/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb.jpg";
  3308. }else if(botID == 15) {
  3309. BotBetName = "Hacki";
  3310. BotBetAvatar = "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/07/07afc9a0d3746804964eba6043245e68299476c5.jpg";
  3311. }else if(botID == 16) {
  3312. BotBetName = "Killer";
  3313. BotBetAvatar = "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/35/3558f1dc05717b57b43eca40cfa963407c6705eb.jpg";
  3314. }else if(botID == 17) {
  3315. BotBetName = "Milfanos";
  3316. BotBetAvatar = "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/01/0136e6775252a869ba6da0f9c4eec09fad46760f.jpg";
  3317. }else if(botID == 18) {
  3318. BotBetName = "PicardoSX";
  3319. BotBetAvatar = "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/10/10ac70b49140bdd4471f806bdc092f47d87aa109.jpg";
  3320. }else if(botID == 19) {
  3321. BotBetName = "Mauritzo";
  3322. BotBetAvatar = "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/cb/cbd22949661f9aa88afe60b7603b0faf02725135.jpg";
  3323. }else if(botID == 20) {
  3324. BotBetName = "FindNextTab";
  3325. BotBetAvatar = "http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/07/07afc9a0d3746804964eba6043245e68299476c5.jpg";
  3326. }else {
  3327. return;
  3328. }
  3329. }
  3330.  
  3331. function setBetBots() {
  3332. var RandomBot = Math.floor(Math.random() * (20 - 1 + 1)) + 1;
  3333.  
  3334. addBetBot(RandomBot);
  3335. }
  3336.  
  3337. function addBetBot(botID) {
  3338. var BotUser = 1337+botID;
  3339.  
  3340. var UsedBots = [];
  3341.  
  3342. pickBot(botID);
  3343.  
  3344. var amount = Math.floor(Math.random() * (1450 - 250 + 1)) + 250;
  3345. var BotLevel = Math.floor(Math.random() * (15 - 0 + 1)) + 0;
  3346.  
  3347. var lower;
  3348. var upper;
  3349.  
  3350. var RandomBet = Math.floor(Math.random() * (3 - 1 + 1)) + 1;
  3351.  
  3352. if(RandomBet == 1) {
  3353. lower = 0;
  3354. upper = 0;
  3355. }else if(RandomBet == 2) {
  3356. lower = 1;
  3357. upper = 7;
  3358. }else if(RandomBet == 3){
  3359. lower = 8;
  3360. upper = 14;
  3361. }
  3362.  
  3363. if(timer-wait <= 5) {
  3364. logger.debug('Bot did not bet!!');
  3365. }else {
  3366. if(usersBr[BotUser] === undefined) {
  3367. usersBr[BotUser] = 1;
  3368. } else {
  3369. usersBr[BotUser]++;
  3370. }
  3371. if(usersAmount[BotUser] === undefined) {
  3372. usersAmount[BotUser] = {
  3373. '0-0': 0,
  3374. '1-7': 0,
  3375. '8-14': 0
  3376. };
  3377. }
  3378. usersAmount[BotUser][lower+'-'+upper] += parseInt(amount);
  3379. currentSums[lower+'-'+upper] += amount;
  3380. io.sockets.emit('message', {
  3381. type: 'bet',
  3382. bet: {
  3383. amount: usersAmount[BotUser][lower+'-'+upper],
  3384. level: BotLevel,
  3385. icon: BotBetAvatar,
  3386. lower: lower,
  3387. name: BotBetName,
  3388. rollid: currentRollid,
  3389. upper: upper,
  3390. user: BotUser,
  3391. won: null
  3392. },
  3393. sums: {
  3394. 0: currentSums['0-0'],
  3395. 1: currentSums['1-7'],
  3396. 2: currentSums['8-14']
  3397. }
  3398. });
  3399. currentBets.push({
  3400. amount: amount,
  3401. level: levelA,
  3402. icon: BotLevel,
  3403. lower: lower,
  3404. name: BotBetName,
  3405. rollid: currentRollid,
  3406. upper: upper,
  3407. user: BotUser,
  3408. });
  3409. checkTimer();
  3410. }
  3411. }
  3412.  
  3413.  
  3414. /* COINFLIP */
  3415. function createCFGame(m, user, socket) {
  3416. var selectedCoin = m.selectedCoin;
  3417. var betAmount = parseInt(m.amount);
  3418.  
  3419. if((betAmount < minbet) || (betAmount > maxbet)) {
  3420. socket.emit('message', {
  3421. type: 'error',
  3422. mtype: 'roulette',
  3423. enable: true,
  3424. error: 'Error: Invalid bet amount ['+minbet+'-'+maxbet+']!'
  3425. });
  3426. return;
  3427. }
  3428.  
  3429. if(/(a|b|c|d|e|f|g|h|j|i|k|l|m|n|o|p|q|r|s|t|v|u|w|x|y|z)/.exec(betAmount)) {
  3430. socket.emit('message', {
  3431. type: 'error',
  3432. mtype: 'roulette',
  3433. enable: true,
  3434. error: 'Error: Invalid bet amount!'
  3435. });
  3436. logger.warn(user.steamid+' try to cheating to COINFLIP BET_AMOUNT');
  3437. return;
  3438. }
  3439.  
  3440. if(selectedCoin != 't' && selectedCoin != 'ct'){
  3441. socket.emit('message', {
  3442. type: 'error',
  3443. mtype: 'coinflip',
  3444. btype: 'create',
  3445. enable: true,
  3446. error: 'Error: Invalid coin!'
  3447. });
  3448. logger.warn(user.steamid+' try to cheating to COINFLIP COIN_TIPE');
  3449. return;
  3450. }
  3451.  
  3452. query('SELECT COUNT(*) AS `total` FROM `coinflip` WHERE `p1_steamid`='+pool.escape(user.steamid)+' AND `result` = 0', function(err, row) {
  3453. if(err) {
  3454. logger.error('ERROR');
  3455. logger.error(err);
  3456. }
  3457. query('SELECT `balance`, `countDeposits` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(e, rr) {
  3458. if(e) return;
  3459. if(betAmount > rr[0].balance) {
  3460. socket.emit('message', {
  3461. type: 'error',
  3462. mtype: 'coinflip',
  3463. btype: 'create',
  3464. enable: true,
  3465. error: 'Error: You do not have enough coins to create the game!'
  3466. });
  3467. return;
  3468. } else {
  3469. if(row[0].total >= maxCoinflips) {
  3470. socket.emit('message', {
  3471. type: 'error',
  3472. mtype: 'coinflip',
  3473. btype: 'create',
  3474. enable: true,
  3475. error: 'Error: You can create just '+maxCoinflips+' game!'
  3476. });
  3477. } else {
  3478. query('UPDATE `users` SET `balance` = `balance` - '+parseInt(betAmount)+' WHERE `steamid` = '+pool.escape(user.steamid), function(errr){
  3479. if(errr) return;
  3480.  
  3481. if(rr[0].countDeposits >= 1) query('UPDATE `users` SET `available` = `available` + '+parseInt(m.amount / 3)+' WHERE `steamid` = '+pool.escape(user.steamid));
  3482. if(rr[0].countDeposits >= 0) query('UPDATE `users` SET `bets` = `bets` + '+parseInt(m.amount)+' WHERE `steamid` = '+pool.escape(user.steamid));
  3483.  
  3484. var castigator = Math.floor(Math.random() * (2 - 1 + 1)) + 1;
  3485. if(castigator == '1') {
  3486. WinnerC = 'ct';
  3487. }else if(castigator == '2') {
  3488. WinnerC = 't';
  3489. }
  3490.  
  3491. query('INSERT INTO `coinflip` SET `p1_steamid` = '+pool.escape(user.steamid)+', `p1_name` = '+pool.escape(user.name)+', `p1_pick` = '+pool.escape(selectedCoin)+', `amount` = '+parseInt(betAmount)+', `won_pick` = '+pool.escape(WinnerC)+', `hash` = '+pool.escape(getHash("COINFLIP", getRandomInt(1,2)+WinnerC+time()))+', `time` = '+pool.escape(time()));
  3492.  
  3493. io.sockets.emit('message', {
  3494. type: 'refCoinflip'
  3495. });
  3496.  
  3497. getBalance(user.steamid, socket);
  3498. });
  3499. }
  3500. }
  3501. });
  3502. });
  3503. }
  3504.  
  3505.  
  3506. function watchCFGame(m, user, socket) {
  3507. var NumberID = m.gamenr;
  3508.  
  3509. if(NumberID < 0) {
  3510. socket.emit('message', {
  3511. type: 'error',
  3512. error: 'Error: Invalid id game!'
  3513. });
  3514. logger.warn(user.steamid+' try to cheating to COINFLIP ID_GAME_WATCH');
  3515. return;
  3516. }
  3517.  
  3518. query('SELECT `p1_pick`, `p2_pick`, `p1_name`, `p2_name`, `p1_steamid`, `p2_steamid`, `won_pick`, `result` FROM `coinflip` WHERE `id` = '+pool.escape(NumberID), function(err, row) {
  3519. if(err) {
  3520. socket.emit('message', {
  3521. type: 'error',
  3522. error: 'Error: Invalid id game!'
  3523. });
  3524. logger.warn(user.steamid+' try to cheating to COINFLIP ID_GAME_WATCH');
  3525. return;
  3526. }
  3527.  
  3528. var Result = row[0].result;
  3529.  
  3530. query('SELECT `avatar` FROM `users` WHERE `steamid` = '+pool.escape(row[0].p1_steamid), function(err2, row2){
  3531. if(err2) return;
  3532. var AvatarP1 = row2[0].avatar;
  3533. if(Result == 0){
  3534. var PickP1 = row[0].p1_pick;
  3535. var NameP1 = row[0].p1_name;
  3536. var SteamP1 = row[0].p1_steamid;
  3537. var Won_pick = row[0].won_pick;
  3538. socket.emit('message', {
  3539. type: 'watchcfgame',
  3540. GameID: NumberID,
  3541. pickp1: PickP1,
  3542. namep1: NameP1,
  3543. steamp1: SteamP1,
  3544. avatarp1: AvatarP1,
  3545. wonpick: Won_pick
  3546. });
  3547. }else if(Result == 1){
  3548. query('SELECT `avatar` FROM `users` WHERE `steamid` = '+pool.escape(row[0].p2_steamid), function(err3, row3){
  3549. if(err3) return;
  3550.  
  3551. socket.emit('message', {
  3552. type: 'finishCoinflip',
  3553. flip: row[0].won_pick,
  3554. numeplayer1: row[0].p1_name,
  3555. steamidplayer1: row[0].p1_steamid,
  3556. choiceplayer1: row[0].p1_pick,
  3557. avatarplayer1: AvatarP1,
  3558. numeplayer2: row[0].p2_name,
  3559. steamidplayer2: row[0].p2_steamid,
  3560. choiceplayer2: row[0].p2_pick,
  3561. avatarplayer2: row3[0].avatar
  3562. });
  3563. });
  3564. }
  3565. });
  3566. });
  3567. }
  3568.  
  3569.  
  3570. function joinCFGame(m, user, socket) {
  3571. var NumberGame = m.gamenr;
  3572.  
  3573. if(NumberGame < 0) {
  3574. socket.emit('message', {
  3575. type: 'error',
  3576. error: 'Error: Invalid id game!'
  3577. });
  3578. logger.warn(user.steamid+' try to cheating to COINFLIP ID_GAME_CREATE');
  3579. return;
  3580. }
  3581.  
  3582. query('SELECT `result`,`id`,`p1_pick`,`amount`, `p1_steamid`, `p1_name` FROM `coinflip` WHERE `id` = '+pool.escape(NumberGame), function(err, row) {
  3583. if(err || !row[0]) {
  3584. socket.emit('message', {
  3585. type: 'error',
  3586. error: 'Error: Invalid id game!'
  3587. });
  3588. logger.warn(user.steamid+' try to cheating to COINFLIP ID_GAME_CREATE');
  3589. return;
  3590. }
  3591.  
  3592. if(row[0].p1_pick == 'ct'){
  3593. var pickedP2Coin = 't';
  3594. } else if(row[0].p1_pick == 't'){
  3595. var pickedP2Coin = 'ct';
  3596. }
  3597.  
  3598. if(row[0].result != 0) {
  3599. socket.emit('message', {
  3600. type: 'error',
  3601. error: 'Error: This game are already flipping!'
  3602. });
  3603. return;
  3604. }
  3605.  
  3606. if(user.steamid == row[0].p1_steamid) {
  3607. socket.emit('message', {
  3608. type: 'error',
  3609. error: 'Error: You cannot join your game!'
  3610. });
  3611. return;
  3612. }
  3613.  
  3614. query('SELECT `balance`, `totalDeposits` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(e, rr) {
  3615. if(e) return;
  3616. if(rr[0].balance < row[0].amount) {
  3617. socket.emit('message', {
  3618. type: 'error',
  3619. error: 'Error: You do not have enough coins to join the game!'
  3620. });
  3621. return;
  3622. }else if(row[0].amount <= rr[0].balance) {
  3623. query('UPDATE `users` SET `balance` = `balance` - '+parseInt(row[0].amount)+' WHERE `steamid` = '+pool.escape(user.steamid), function(errr){
  3624. if(err) return;
  3625.  
  3626. if(rr[0].countDeposits >= 1) query('UPDATE `users` SET `available` = `available` + '+parseInt(m.amount / 3)+' WHERE `steamid` = '+pool.escape(user.steamid));
  3627. if(rr[0].countDeposits >= 0) query('UPDATE `users` SET `bets` = `bets` + '+parseInt(m.amount)+' WHERE `steamid` = '+pool.escape(user.steamid));
  3628.  
  3629. query('UPDATE `coinflip` SET `result` = 1 WHERE `id` = '+row[0].id);
  3630. query('UPDATE `coinflip` SET `p2_steamid` = '+pool.escape(user.steamid)+', `p2_name` = '+pool.escape(user.name)+', `p2_pick` = '+pool.escape(pickedP2Coin)+' WHERE `id`='+row[0].id);
  3631.  
  3632. query('SELECT `won_pick`, `id` FROM `coinflip` WHERE `id` = '+pool.escape(row[0].id), function(err2, row2) {
  3633. if(err2) return;
  3634.  
  3635. io.sockets.emit('message', {
  3636. type: 'refCoinflip'
  3637. });
  3638.  
  3639. getBalance(user.steamid, socket);
  3640.  
  3641. setTimeout(function() {
  3642. if(row2[0].won_pick == row[0].p1_pick) {
  3643. query('UPDATE `users` SET `balance` = `balance` + '+parseInt(1.95*row[0].amount)+' WHERE `steamid` = '+pool.escape(row[0].p1_steamid));
  3644. setTimeout(function() {
  3645. io.sockets.in(row[0].p1_steamid).emit('message', {
  3646. type: 'alert',
  3647. alert: 'You won the coinflip game #'+row[0].id+' | Coins won: '+parseInt(1.95*row[0].amount)+'!'
  3648. });
  3649. io.sockets.in(user.steamid).emit('message', {
  3650. type: 'error',
  3651. error: 'You lost the coinflip game #'+row[0].id+' | Coins lost: '+parseInt(row[0].amount)+'!'
  3652. });
  3653.  
  3654. getBalance(user.steamid, socket);
  3655.  
  3656. io.sockets.emit('message', {
  3657. type: 'refCoinflip'
  3658. });
  3659. query('UPDATE `coinflip` SET `result` = 2 WHERE `id`='+row[0].id);
  3660. }, 4000);
  3661. }else if(row2[0].won_pick != row[0].p1_pick) {
  3662. query('UPDATE `users` SET `balance` = `balance` + '+parseInt(1.95*row[0].amount)+' WHERE `steamid` = '+pool.escape(user.steamid));
  3663. setTimeout(function() {
  3664. io.sockets.in(row[0].p1_steamid).emit('message', {
  3665. type: 'error',
  3666. error: 'You lost the coinflip game #'+row[0].id+' | Coins lost: '+parseInt(row[0].amount)+'!'
  3667. });
  3668. io.sockets.in(user.steamid).emit('message', {
  3669. type: 'alert',
  3670. alert: 'You won the coinflip game #'+row[0].id+' | Coins won: '+parseInt(1.95*row[0].amount)+'!'
  3671. });
  3672.  
  3673. getBalance(user.steamid, socket);
  3674.  
  3675. io.sockets.emit('message', {
  3676. type: 'refCoinflip'
  3677. });
  3678. query('UPDATE `coinflip` SET `result`=2 WHERE `id`='+row[0].id);
  3679. }, 4000);
  3680. }
  3681. query('SELECT `avatar` FROM `users` WHERE `steamid` = '+pool.escape(row[0].p1_steamid), function(err3, row3) {
  3682. if(err3) return;
  3683. query('SELECT `avatar` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err4, row4) {
  3684. io.sockets.in(row[0].p1_steamid).emit('message', {
  3685. type: 'finishCoinflip',
  3686. flip: row2[0].won_pick,
  3687. numeplayer1: row[0].p1_name,
  3688. steamidplayer1: row[0].p1_steamid,
  3689. choiceplayer1: row[0].p1_pick,
  3690. avatarplayer1: row3[0].avatar,
  3691. numeplayer2: user.name,
  3692. steamidplayer2: user.steamid,
  3693. choiceplayer2: pickedP2Coin,
  3694. avatarplayer2: row4[0].avatar
  3695. });
  3696. io.sockets.in(user.steamid).emit('message', {
  3697. type: 'finishCoinflip',
  3698. flip: row2[0].won_pick,
  3699. numeplayer1: row[0].p1_name,
  3700. steamidplayer1: row[0].p1_steamid,
  3701. choiceplayer1: row[0].p1_pick,
  3702. avatarplayer1: row3[0].avatar,
  3703. numeplayer2: user.name,
  3704. steamidplayer2: user.steamid,
  3705. choiceplayer2: pickedP2Coin,
  3706. avatarplayer2: row4[0].avatar
  3707. });
  3708. //SEND WATCH TO PLAYER
  3709. io.sockets.emit('message', {
  3710. type: 'watchcfgameShow',
  3711. GameID: row2[0].id,
  3712. flip: row2[0].won_pick,
  3713. numeplayer2: user.name,
  3714. steamidplayer2: user.steamid,
  3715. choiceplayer2: pickedP2Coin,
  3716. avatarplayer2: row4[0].avatar
  3717. });
  3718. });
  3719. });
  3720. }, 1500);
  3721. });
  3722. });
  3723. }
  3724. });
  3725. });
  3726. }
  3727. /* END COINFLIP */
  3728.  
  3729.  
  3730.  
  3731.  
  3732.  
  3733. /* ElSE */
  3734. var tagsToReplace = {
  3735. '&': '&amp;',
  3736. '<': '&lt;',
  3737. '>': '&gt;'
  3738. };
  3739.  
  3740. function replaceTag(tag) {
  3741. return tagsToReplace[tag] || tag;
  3742. }
  3743.  
  3744. function safe_tags_replace(str) {
  3745. return str.replace(/[&<>]/g, replaceTag);
  3746. }
  3747. Object.size = function(obj) {
  3748. var size = 0,
  3749. key;
  3750. for (key in obj) {
  3751. if (obj.hasOwnProperty(key)) size++;
  3752. }
  3753. return size;
  3754. };
  3755. function getRandomInt(min, max) {
  3756. return Math.floor(Math.random() * (max - min + 1)) + min;
  3757. }
  3758. function getRandomArbitary(min, max) {
  3759. return Math.random() * (max - min) + min;
  3760. }
  3761. function query(sql, callback) {
  3762. if (typeof callback === 'undefined') {
  3763. callback = function() {};
  3764. }
  3765. pool.getConnection(function(err, connection) {
  3766. if(err) return callback(err);
  3767. //logger.info('DB Connection ID: '+connection.threadId);
  3768. connection.query(sql, function(err, rows) {
  3769. if(err) return callback(err);
  3770. connection.release();
  3771. return callback(null, rows);
  3772. });
  3773. });
  3774. }
  3775.  
  3776. function getHash(a,b){
  3777. var crypto = require('crypto');
  3778. var serverSeed = a+b;
  3779. var genGameHash = function(serverSeed) {
  3780. return crypto.createHash('sha256').update(serverSeed).digest('hex');
  3781. };
  3782. return terminatingHash = genGameHash(serverSeed);
  3783. }
  3784.  
  3785. /**/
  3786. function getRoll(hash, secret, lottery){
  3787. var rolled = sha256(hash+'-'+secret+'-'+lottery);
  3788. rolled = hexdec(rolled.substr(0, 8)) % 15;
  3789. return rolled;
  3790. }
  3791.  
  3792. function makeCode() {
  3793. var text = "";
  3794. var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  3795.  
  3796. for(var i=0; i < 12; i++)
  3797. text += possible.charAt(Math.floor(Math.random() * possible.length));
  3798.  
  3799. return text;
  3800. }
  3801.  
  3802. function hexdec(hexString) {
  3803. hexString = (hexString + '').replace(/[^a-f0-9]/gi, '')
  3804. return parseInt(hexString, 16)
  3805. }
  3806. /**/
  3807.  
  3808. function time() {
  3809. return parseInt(new Date().getTime()/1000);
  3810. }
Add Comment
Please, Sign In to add comment