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