Advertisement
Guest User

4 milbo<3

a guest
Mar 14th, 2017
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 37.52 KB | None | 0 0
  1. New.js :
  2.  
  3. "use strict";
  4. var CASEW = 1050;
  5. var LAST_BET = 0;
  6. var MAX_BET = 0;
  7. var HIDEG = false;
  8. var USER = "";
  9. var RANK = 0;
  10. var ROUND = 0;
  11. var HOST = "45.32.187.206";
  12. var SOCKET = null;
  13. var showbets = true;
  14.  
  15. function todongers(x) {
  16. if ($("#settings_dongers").is(":checked")) {
  17. return (x / 1000);
  18. }
  19. return x;
  20. }
  21.  
  22. function todongersb(x) {
  23. if ($("#settings_dongers").is(":checked")) {
  24. return (x / 1000).toFixed(3);
  25. }
  26. return x;
  27. }
  28. var snapX = 0;
  29. var R = 0.999;
  30. var S = 0.01;
  31. var tf = 0;
  32. var vi = 0;
  33. var animStart = 0;
  34. var isMoving = false;
  35. var LOGR = Math.log(R);
  36. var $CASE = null;
  37. var $BANNER = null;
  38. var $CHATAREA = null;
  39. var SCROLL = true;
  40. var LANG = 1;
  41. var IGNORE = [];
  42. var sounds_rolling = new Audio('/template/sounds/rolling.wav');
  43. sounds_rolling.volume = 0.5;
  44. var sounds_tone = new Audio('/template/sounds/tone.wav');
  45. sounds_tone.volume = 0.75;
  46.  
  47. function play_sound(x) {
  48. var conf = $("#settings_sounds").is(":checked");
  49. if (conf) {
  50. if (x == "roll") {
  51. sounds_rolling.play();
  52. } else if (x == "finish") {
  53. sounds_tone.play();
  54. }
  55. }
  56. }
  57.  
  58. function snapRender(x, wobble) {
  59. CASEW = $("#case").width();
  60. if (isMoving) return;
  61. else if (typeof x === 'undefined') view(snapX);
  62. else {
  63. var order = [1, 14, 2, 13, 3, 12, 4, 0, 11, 5, 10, 6, 9, 7, 8];
  64. var index = 0;
  65. for (var i = 0; i < order.length; i++) {
  66. if (x == order[i]) {
  67. index = i;
  68. break
  69. }
  70. }
  71. var max = 32;
  72. var min = -32;
  73. var w = Math.floor(wobble * (max - min + 1) + min);
  74. var dist = index * 70 + 36 + w;
  75. dist += 1050 * 5;
  76. snapX = dist;
  77. view(snapX)
  78. }
  79. }
  80.  
  81. function spin(m) {
  82. var x = m.roll;
  83. play_sound("roll");
  84. var order = [1, 14, 2, 13, 3, 12, 4, 0, 11, 5, 10, 6, 9, 7, 8];
  85. var index = 0;
  86. for (var i = 0; i < order.length; i++) {
  87. if (x == order[i]) {
  88. index = i;
  89. break
  90. }
  91. }
  92. var max = 32;
  93. var min = -32;
  94. var w = Math.floor(m.wobble * (max - min + 1) + min);
  95. var dist = index * 70 + 36 + w;
  96. dist += 1050 * 5;
  97. animStart = new Date().getTime();
  98. vi = getVi(dist);
  99. tf = getTf(vi);
  100. isMoving = true;
  101. setTimeout(function() {
  102. finishRoll(m, tf)
  103. }, tf);
  104. render()
  105. }
  106.  
  107. function d_mod(vi, t) {
  108. return vi * (Math.pow(R, t) - 1) / LOGR;
  109. }
  110.  
  111. function getTf(vi) {
  112. return (Math.log(S) - Math.log(vi)) / LOGR;
  113. }
  114.  
  115. function getVi(df) {
  116. return S - df * LOGR;
  117. }
  118.  
  119. function v(vi, t) {
  120. return vi * Math.pow(R, t);
  121. }
  122.  
  123. function render() {
  124. var t = new Date().getTime() - animStart;
  125. if (t > tf)
  126. t = tf;
  127. var deg = d_mod(vi, t);
  128. view(deg);
  129. if (t < tf) {
  130. requestAnimationFrame(render);
  131. } else {
  132. snapX = deg;
  133. isMoving = false;
  134. }
  135. }
  136.  
  137. function view(offset) {
  138. offset = -((offset + 1050 - CASEW / 2) % 1050);
  139. $CASE.css("background-position", offset + "px 0px");
  140. }
  141. jQuery.fn.extend({
  142. countTo: function(x, opts) {
  143. opts = opts || {};
  144. var dpf = "";
  145. var dolls = $("#settings_dongers").is(":checked");
  146. if (dolls) {
  147. dpf = "$";
  148. x = x / 1000;
  149. }
  150. var $this = $(this);
  151. var start = parseFloat($this.html());
  152. var delta = x - start;
  153. if (opts.color) {
  154. if (delta > 0) {
  155. $this.addClass("text-success");
  156. } else if (delta < 0) {
  157. $this.addClass("text-danger");
  158. }
  159. }
  160. var prefix = "";
  161. if (opts.keep && delta > 0) {
  162. prefix = "+";
  163. }
  164. var durd = delta;
  165. if (dolls) {
  166. durd *= 1000;
  167. }
  168. var dur = Math.min(400, Math.round(Math.abs(durd) / 500 * 400));
  169. $({
  170. count: start
  171. }).animate({
  172. count: x
  173. }, {
  174. duration: dur,
  175. step: function(val) {
  176. var vts = 0;
  177. if (dolls) {
  178. vts = val.toFixed(3);
  179. } else {
  180. vts = Math.floor(val);
  181. }
  182. $this.html("" + prefix + (vts));
  183. },
  184. complete: function() {
  185. if (!opts.keep) {
  186. $this.removeClass("text-success text-danger");
  187. }
  188. if (opts.callback) {
  189. opts.callback();
  190. }
  191. }
  192. });
  193. }
  194. });
  195.  
  196. function cd(ms, cb) {
  197. $("#counter").finish().css("width", "100%");
  198. $("#counter").animate({
  199. width: "0%"
  200. }, {
  201. "duration": ms * 1000,
  202. "easing": "linear",
  203. progress: function(a, p, r) {
  204. var c = (r / 1000).toFixed(2);
  205. $BANNER.html("Rolling in " + c + "...");
  206. },
  207. complete: cb
  208. });
  209. }
  210.  
  211. function send(msg) {
  212. if (SOCKET) {
  213. SOCKET.emit('mes', msg);
  214. }
  215. }
  216.  
  217. function finishRoll(m, tf) {
  218. $BANNER.html("Rolled number " + m.roll + "!");
  219. addHist(m.roll, m.rollid);
  220. play_sound("finish");
  221. for (var i = 0; i < m.nets.length; i++) {
  222. $("#panel" + m.nets[i].lower + "-" + m.nets[i].upper).find(".total").countTo(m.nets[i].swon > 0 ? m.nets[i].swon : -m.nets[i].samount, {
  223. "color": true,
  224. "keep": true
  225. });
  226. }
  227. var cats = [
  228. [0, 0],
  229. [1, 7],
  230. [8, 14]
  231. ];
  232. for (var i = 0; i < cats.length; i++) {
  233. var $mytotal = $("#panel" + cats[i][0] + "-" + cats[i][1]).find(".mytotal");
  234. if (m.roll >= cats[i][0] && m.roll <= cats[i][1]) {
  235. $mytotal.countTo(m.won, {
  236. "color": true,
  237. "keep": true
  238. });
  239. } else {
  240. var curr = parseFloat($mytotal.html());
  241. if ($("#settings_dongers").is(":checked")) {
  242. curr *= 1000;
  243. }
  244. $mytotal.countTo(-curr, {
  245. "color": true,
  246. "keep": true
  247. });
  248. }
  249. }
  250. if (m.balance != null) {
  251. $("#balance").countTo(m.balance, {
  252. "color": true
  253. });
  254. checkplus(m.balance);
  255. }
  256. setTimeout(function() {
  257. cd(m.count);
  258. $(".total,.mytotal").removeClass("text-success text-danger").html(0);
  259. $(".betlist li").remove();
  260. snapRender();
  261. $(".betButton").prop("disabled", false);
  262. showbets = true;
  263. }, m.wait * 1000 - tf);
  264. }
  265.  
  266. function checkplus(balance) {
  267. if(balance < 20) {
  268. $('#oneplusbutton').show();
  269. } else {
  270. $('#oneplusbutton').hide();
  271. }
  272. }
  273.  
  274. function addHist(roll, rollid) {
  275. var count = $("#past .ball").length;
  276. if (count >= 10) {
  277. $("#past .ball").first().remove();
  278. }
  279. if (roll == 0) {
  280. $("#past").append("<div data-rollid='" + rollid + "'class='ball ball-0'>" + roll + "</div>");
  281. } else if (roll <= 7) {
  282. $("#past").append("<div data-rollid='" + rollid + "'class='ball ball-1'>" + roll + "</div>");
  283. } else {
  284. $("#past").append("<div data-rollid='" + rollid + "'class='ball ball-8'>" + roll + "</div>");
  285. }
  286. }
  287.  
  288. function onMessage(msg) {
  289. var m = msg;
  290. console.log(msg);
  291. if (m.type == "preroll") {
  292. $("#counter").finish();
  293. $("#banner").html("Confirming " + m.totalbets + "/" + (m.totalbets + m.inprog) + " total bets...");
  294. $("#panel0-0-t .total").countTo(m.sums[0]);
  295. $("#panel1-7-t .total").countTo(m.sums[1]);
  296. $("#panel8-14-t .total").countTo(m.sums[2]);
  297. try {
  298. tinysort("#panel1-7-t .betlist>li", {
  299. data: "amount",
  300. order: "desc"
  301. });
  302. } catch (e) {}
  303. try {
  304. tinysort("#panel8-14-t .betlist>li", {
  305. data: "amount",
  306. order: "desc"
  307. });
  308. } catch (e) {}
  309. try {
  310. tinysort("#panel0-0-t .betlist>li", {
  311. data: "amount",
  312. order: "desc"
  313. });
  314. } catch (e) {}
  315. } else if (m.type == "roll") {
  316. $(".betButton").prop("disabled", true);
  317. $("#counter").finish();
  318. $("#banner").html("***ROLLING***");
  319. ROUND = m.rollid;
  320. showbets = false;
  321. spin(m);
  322. } else if (m.type == "chat") {
  323. chat("player", m.msg, m.name, m.icon, m.user, m.rank, m.lang, m.hide);
  324. } else if (m.type == "hello") {
  325. cd(m.count);
  326. USER = m.user; // steamid
  327. RANK = m.rank; // rank admin
  328. $("#balance").countTo(m.balance);
  329. checkplus(m.balance);
  330. var last = 0;
  331. for (var i = 0; i < m.rolls.length; i++) {
  332. addHist(m.rolls[i].roll, m.rolls[i].rollid);
  333. last = m.rolls[i].roll;
  334. ROUND = m.rolls[i].rollid;
  335. }
  336. snapRender(last, m.last_wobble);
  337. MAX_BET = m.maxbet;
  338. chat("alert", "Minimum bet: " + m.minbet + " coins, " + "Maximum bet: " + formatNum(MAX_BET) + " coins, " + " Bets per round: " + m.br + ", Round time : " + m.accept + " sec, " + " Chat delay: " + m.chat + " sec. ");
  339. } else if (m.type == "bet") {
  340. if (showbets) {
  341. addBet(m.bet);
  342. $("#panel0-0-t .total").countTo(m.sums[0]);
  343. $("#panel1-7-t .total").countTo(m.sums[1]);
  344. $("#panel8-14-t .total").countTo(m.sums[2])
  345. }
  346. } else if (m.type == "betconfirm") {
  347. $("#panel" + m.bet.lower + "-" + m.bet.upper + "-m .mytotal").countTo(m.bet.amount);
  348. $("#balance").countTo(m.balance, {
  349. "color": true
  350. });
  351. checkplus(m.balance);
  352. $(".betButton").prop("disabled", false);
  353. chat("alert", "Bet #" + m.bet.betid + " confirmed " + m.mybr + "/" + m.br + " (" + (m.exec / 1000) + " sec) ");
  354. } else if (m.type == "error") {
  355. chat("error", m.error);
  356. if (m.enable) {
  357. $(".betButton").prop("disabled", false);
  358. }
  359. } else if (m.type == "alert") {
  360. chat("alert", m.alert);
  361. if (m.maxbet) {
  362. MAX_BET = m.maxbet;
  363. }
  364. if (!isNaN(m.balance)) {
  365. console.log("setting balance = %s", m.balance);
  366. $("#balance").countTo(m.balance, {
  367. "color": true
  368. });
  369. checkplus(m.balance);
  370. }
  371. } else if (m.type == "logins") {
  372. $("#isonline").html(m.count);
  373. } else if (m.type == "balance") {
  374. $("#balance").fadeOut(100).html(todongersb(m.balance)).fadeIn(100);
  375. checkplus(m.balance);
  376. }
  377. }
  378.  
  379. function addBet(bet) {
  380. var betid = bet.user + "-" + bet.lower;
  381. var pid = "#panel" + bet.lower + "-" + bet.upper;
  382. var $panel = $(pid);
  383. $panel.find("#" + betid).remove();
  384. var f = "<li class='list-group-item' id='{0}' data-amount='{1}'>";
  385. f += "<div style='overflow: hidden;line-height:32px'>";
  386. f += "<div class='pull-left'><img class='rounded' src='https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars{2}'> <b>{3}</b></div>";
  387. f += "<div class='amount pull-right'>{4}</div>";
  388. f += "</div></li>";
  389. var $li = $(f.format(betid, bet.amount, bet.icon, bet.name, todongersb(bet.amount)));
  390. $li.hide().prependTo($panel.find(".betlist")).slideDown("fast", function() {
  391. snapRender();
  392. });
  393. }
  394.  
  395. function connect() {
  396. if(!SOCKET) {
  397. chat("italic", "Generating token...");
  398. var hash = getCookie('hash');
  399. if(!hash) {
  400. chat("italic", "Please, sing through steam.");
  401. } else {
  402. chat("italic", "Connecting...");
  403. SOCKET = io(HOST);
  404. SOCKET.on('connect', function(msg) {
  405. chat("italic", "Connected!");
  406. SOCKET.emit('hash', hash);
  407. });
  408. SOCKET.on('connect_error', function(msg) {
  409. chat("italic", "Conection lost...");
  410. });
  411. SOCKET.on('message', function(msg) {
  412. onMessage(msg);
  413. });
  414. }
  415. } else {
  416. console.log("Error: connection already exists.");
  417. }
  418. }
  419.  
  420. function emotes(str) {
  421. var a = ["deIlluminati", "KappaRoss", "KappaPride", "BibleThump", "Kappa", "Keepo", "Kreygasm", "PJSalt", "PogChamp", "SMOrc", "CO", "CA", "Tb", "offFire", "Fire", "rip", "lovegreen", "heart", "FailFish"];
  422. for (var i = 0; i < a.length; i++) {
  423. str = str.replace(new RegExp(a[i] + "( |$)", "g"), "<img src='/template/img/twitch/" + a[i] + ".png'> ");
  424. }
  425. return str;
  426. }
  427.  
  428. function chat(x, msg, name, icon, steamid, rank, lang, hide) {
  429. if (IGNORE.indexOf(String(steamid)) > -1) {
  430. console.log("ignored:" + msg);
  431. return;
  432. }
  433. if (lang == LANG || x == "italic" || x == "error" || x == "alert") {
  434. var ele = document.getElementById("chatArea");
  435. msg = msg.replace(/(<|>)/g, '');
  436. msg = emotes(msg);
  437. var toChat = "";
  438. if (x == "italic") toChat = "<div class='chat-msg'><img class='chat-img rounded' data-steamid='0' data-name='System' src='https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/fe/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb.jpg'><div><span>System</span></div> <div>" + msg + "</div></div>";
  439. else if (x == "error") toChat = "<div class='chat-msg'><img class='chat-img rounded' data-steamid='0' data-name='System' src='https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/fe/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb.jpg'><div><span>Error</span></div> <div class='text-danger'>" + msg + "</div></div>";
  440. else if (x == "alert") toChat = "<div class='chat-msg'><img class='chat-img rounded' data-steamid='0' data-name='System' src='https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/fe/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb.jpg'><div><span>Alert</span></div> <div class='text-success'>" + msg + "</div></div>";
  441. else if (x == "player") {
  442. var aclass = "chat-link";
  443. if (rank == 100) {
  444. aclass = "chat-link-mod";
  445. name = "[Owner] " + name;
  446. } else if (rank == 1) {
  447. aclass = "chat-link-pmod";
  448. name = "[Mod] " + name;
  449. } else if (rank == -1) {
  450. aclass = "chat-link-streamer";
  451. name = "[Streamer] " + name;
  452. } else if (rank == -2) {
  453. aclass = "chat-link-vet";
  454. name = "[Veteran] " + name;
  455. } else if (rank == -3) {
  456. aclass = "chat-link-pro";
  457. name = "[Pro] " + name;
  458. } else if (rank == -4) {
  459. aclass = "chat-link-yt";
  460. name = "[Youtuber] " + name;
  461. } else if (rank == -5) {
  462. aclass = "chat-link-mod";
  463. name = "[Coder] " + name;
  464. }
  465.  
  466. var link = "http://steamcommunity.com/profiles/" + steamid;
  467. toChat = "<div class='chat-msg'><img class='chat-img rounded' data-steamid='" + steamid + "' data-name='" + name + "' src='https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars" + icon + "'>";
  468. if (hide) {
  469. toChat += "<div><span class='" + aclass + "'>" + name + "</span></div><div>" + msg + "</div>";
  470. } else {
  471. toChat += "<div><a href='" + link + "' target='_blank'><span class='" + aclass + "'>" + name + "</span></a></div><div>" + msg + "</div>";
  472. }
  473. }
  474. $CHATAREA.append(toChat);
  475. if (SCROLL) {
  476. var curr = $CHATAREA.children().length;
  477. if (curr > 75) {
  478. var rem = curr - 75;
  479. $CHATAREA.children().slice(0, rem).remove();
  480. }
  481. $CHATAREA.scrollTop($CHATAREA[0].scrollHeight);
  482. }
  483. if (SCROLL && !$(".side-icon[data-tab='1']").hasClass("active")) {
  484. var curr = parseInt($("#newMsg").html()) || 0;
  485. $("#newMsg").html(curr + 1);
  486. }
  487. }
  488. }
  489. $(document).ready(function() {
  490. $CASE = $("#case");
  491. $BANNER = $("#banner");
  492. $CHATAREA = $("#chatArea");
  493. connect();
  494. if ($("#settings_dongers").is(":checked")) {
  495. $("#dongers").html("$");
  496. }
  497. $("#lang").on("change", function() {
  498. LANG = $(this).val();
  499. chat("alert", "You moved to room: " + $(this).find("option:selected").text());
  500. });
  501. $("#scroll").on("change", function() {
  502. SCROLL = !$(this).is(":checked");
  503. });
  504. $(window).resize(function() {
  505. snapRender();
  506. });
  507. $("#chatForm").on("submit", function() {
  508. var msg = $("#chatMessage").val();
  509. if (msg) {
  510. var res = null;
  511. if (res = /^\/send ([0-9]*) ([0-9]*)/.exec(msg)) {
  512. bootbox.confirm("You are going to send " + res[2] + " to the Steam ID " + res[1] + " - are you sure?", function(result) {
  513. if (result) {
  514. send({
  515. "type": "chat",
  516. "msg": msg,
  517. "lang": LANG
  518. });
  519. $("#chatMessage").val("");
  520. }
  521. });
  522. } else {
  523. var hideme = $("#settings_hideme").is(":checked");
  524. send({
  525. "type": "chat",
  526. "msg": msg,
  527. "lang": LANG,
  528. "hide": hideme,
  529. });
  530. $("#chatMessage").val("");
  531. }
  532. }
  533. return false;
  534. });
  535. $(document).on("click", ".ball", function() {
  536. var rollid = $(this).data("rollid");
  537. });
  538. $(".betButton").on("click", function() {
  539. var lower = $(this).data("lower");
  540. var upper = $(this).data("upper");
  541. var amount = str2int($("#betAmount").val());
  542. if ($("#settings_dongers").is(":checked")) {
  543. amount = amount * 1000;
  544. }
  545. amount = Math.floor(amount);
  546. var conf = $("#settings_confirm").is(":checked");
  547. if (conf && amount > 10000) {
  548. var pressed = false;
  549. bootbox.confirm("Are you sure you want to bet " + formatNum(amount) + " credits?<br><br><i>You can disable this in settings.</i>", function(result) {
  550. if (result && !pressed) {
  551. pressed = true;
  552. send({
  553. "type": "bet",
  554. "amount": amount,
  555. "lower": lower,
  556. "upper": upper,
  557. "round": ROUND
  558. });
  559. LAST_BET = amount;
  560. $(this).prop("disabled", true);
  561. }
  562. });
  563. } else {
  564. send({
  565. "type": "bet",
  566. "amount": amount,
  567. "lower": lower,
  568. "upper": upper,
  569. "round": ROUND
  570. });
  571. LAST_BET = amount;
  572. $(this).prop("disabled", true);
  573. }
  574. return false;
  575. });
  576. $('#oneplusbutton').on("click", function() {
  577. console.log('+1');
  578. send({
  579. "type": "plus"
  580. });
  581. });
  582. $(document).on("click", ".betshort", function() {
  583. var bet_amount = str2int($("#betAmount").val());
  584. var action = $(this).data("action");
  585. if (action == "clear") {
  586. bet_amount = 0;
  587. } else if (action == "double") {
  588. bet_amount *= 2;
  589. } else if (action == "half") {
  590. bet_amount /= 2;
  591. } else if (action == "max") {
  592. var MX = MAX_BET;
  593. if ($("#settings_dongers").is(":checked")) {
  594. MX = MAX_BET / 1000;
  595. }
  596. bet_amount = Math.min(str2int($("#balance").html()), MX);
  597. } else if (action == "last") {
  598. bet_amount = 0;
  599. } else {
  600. bet_amount += parseInt(action);
  601. }
  602. $("#betAmount").val(bet_amount);
  603. });
  604. $("#getbal").on("click", function() {
  605. send({
  606. "type": "balance"
  607. });
  608. });
  609. $("button.close").on("click", function() {
  610. $(this).parent().addClass("hidden");
  611. });
  612. $(document).on("contextmenu", ".chat-img", function(e) {
  613. if (e.ctrlKey) return;
  614. $("#contextMenu [data-act=1]").hide();
  615. $("#contextMenu [data-act=2]").hide();
  616. if (RANK == 100) {
  617. $("#contextMenu [data-act=1]").show();
  618. $("#contextMenu [data-act=2]").show();
  619. } else if (RANK == 1) {
  620. $("#contextMenu [data-act=1]").show();
  621. }
  622. e.preventDefault();
  623. var steamid = $(this).data("steamid");
  624. var name = $(this).data("name");
  625. $("#contextMenu [data-act=0]").html(name);
  626. var $menu = $("#contextMenu");
  627. $menu.show().css({
  628. position: "absolute",
  629. left: getMenuPosition(e.clientX, 'width', 'scrollLeft'),
  630. top: getMenuPosition(e.clientY, 'height', 'scrollTop')
  631. }).off("click").on("click", "a", function(e) {
  632. var act = $(this).data("act");
  633. e.preventDefault();
  634. $menu.hide();
  635. if (act == 0) {
  636. var curr = $("#chatMessage").val(steamid);
  637. } else if (act == 1) {
  638. var curr = $("#chatMessage").val("/mute " + steamid + " ");
  639. } else if (act == 2) {
  640. var curr = $("#chatMessage").val("/kick " + steamid + " ");
  641. } else if (act == 3) {
  642. var curr = $("#chatMessage").val("/send " + steamid + " ");
  643. } else if (act == 4) {
  644. IGNORE.push(String(steamid));
  645. chat("alert", steamid + " Ignored.");
  646. }
  647. $("#chatMessage").focus();
  648. });
  649. });
  650. $(document).on("click", function() {
  651. $("#contextMenu").hide();
  652. });
  653. $(".side-icon").on("click", function(e) {
  654. e.preventDefault();
  655. var tab = $(this).data("tab");
  656. if ($(this).hasClass("active")) {
  657. $(".side-icon").removeClass("active");
  658. $(".tab-group").addClass("hidden");
  659. $("#mainpage").css("margin-left", "50px");
  660. $("#pullout").addClass("hidden");
  661. } else {
  662. $(".side-icon").removeClass("active");
  663. $(".tab-group").addClass("hidden");
  664. $(this).addClass("active");
  665. $("#tab" + tab).removeClass("hidden");
  666. $("#mainpage").css("margin-left", "450px");
  667. $("#pullout").removeClass("hidden");
  668. if (tab == 1) {
  669. $("#newMsg").html("");
  670. }
  671. }
  672. snapRender();
  673. return false;
  674. });
  675. $(".smiles li img").on("click", function() {
  676. $("#chatMessage").val($("#chatMessage").val() + $(this).data("smile") + " ")
  677. });
  678. $('.clearChat').on("click", function() {
  679. $('#chatArea').html("<div><b class='text-success'>Chat cleared!</b></div>")
  680. });
  681. $(document).on("click", ".deleteMsg", function(e) {
  682. var t = $(this).data("id");
  683. send({
  684. type: "delmsg",
  685. id: t
  686. })
  687. });
  688. $(".side-icon[data-tab='1']").trigger("click")
  689. });
  690.  
  691. function getAbscentPhrases(msg) {
  692. var phrases = ["hello", 1, "simba"];
  693. for (var i = 0; i < phrases.length; i++) {
  694. if (msg.toLowerCase().indexOf(phrases[i]) + 1) {
  695. return 1
  696. }
  697. }
  698. return 0
  699. }
  700.  
  701. function changeLang(id) {
  702. LANG = $(this).val();
  703. $(".lang-select").html($(".language > li").eq(id - 1).find("a").html());
  704. chat("alert", "Changed to the room: " + $(".language > li").eq(id - 1).find("a").html())
  705. }
  706.  
  707. function getMenuPosition(mouse, direction, scrollDir) {
  708. var win = $(window)[direction](),
  709. scroll = $(window)[scrollDir](),
  710. menu = $("#contextMenu")[direction](),
  711. position = mouse + scroll;
  712. if (mouse + menu > win && menu < mouse)
  713. position -= menu;
  714. return position;
  715. }
  716.  
  717. function str2int(s) {
  718. s = s.replace(/,/g, "");
  719. s = s.toLowerCase();
  720. var i = parseFloat(s);
  721. if (isNaN(i)) {
  722. return 0;
  723. } else if (s.charAt(s.length - 1) == "k") {
  724. i *= 1000;
  725. } else if (s.charAt(s.length - 1) == "m") {
  726. i *= 1000000;
  727. } else if (s.charAt(s.length - 1) == "b") {
  728. i *= 1000000000;
  729. }
  730. return i;
  731. }
  732.  
  733.  
  734. Site.js
  735.  
  736.  
  737.  
  738. var mysql = require('mysql');
  739. var log4js = require('log4js');
  740. var io = require('socket.io')(3001);
  741. var request = require('request');
  742. var fs = require('fs');
  743. var md5 = require('md5');
  744. var sha256 = require('sha256');
  745. var math = require('mathjs');
  746.  
  747. log4js.configure({
  748. appenders: [
  749. { type: 'console' },
  750. { type: 'file', filename: 'logs/site.log' }
  751. ]
  752. });
  753. var logger = log4js.getLogger();
  754.  
  755. var pool = mysql.createPool({
  756. connectionLimit : 10,
  757. database: 'csgo',
  758. host: 'localhost',
  759. user: 'root',
  760. password: 'left4dead'
  761. });
  762.  
  763. process.on('uncaughtException', function (err) {
  764. logger.trace('Strange error');
  765. logger.debug(err);
  766. });
  767.  
  768. /* */
  769. var accept = 30;
  770. var wait = 10;
  771. var br = 3;
  772. var chat = 2;
  773. var chatb = 2000000;
  774. var maxbet = 5000000;
  775. var minbet = 1;
  776. var q1 = 2;
  777. var q2 = 14;
  778. var timer = -1;
  779. var users = {};
  780. var roll = 0;
  781. var currentBets = [];
  782. var historyRolls = [];
  783. var usersBr = {};
  784. var usersAmount = {};
  785. var currentSums = {
  786. '0-0': 0,
  787. '1-7': 0,
  788. '8-14': 0
  789. };
  790. var currentRollid = 0;
  791. var pause = false;
  792. var hash = '';
  793. var last_message = {};
  794. /* */
  795.  
  796. load();
  797.  
  798. var prices;
  799. request('http://backpack.tf/api/IGetMarketPrices/v1/?key=56fce4a5c4404545131c8fcf&compress=1&appid=730', function(error, response, body) {
  800. prices = JSON.parse(body);
  801. if(prices.response.success == 0) {
  802. logger.warn('Loaded fresh prices');
  803. if(fs.existsSync(__dirname + '/prices.txt')){
  804. prices = JSON.parse(fs.readFileSync(__dirname + '/prices.txt'));
  805. logger.warn('Prices loaded from cache');
  806. } else {
  807. logger.error('No prices in cache');
  808. process.exit(0);
  809. }
  810. } else {
  811. fs.writeFileSync('prices.txt', body);
  812. logger.trace('New prices loaded');
  813. }
  814. });
  815.  
  816. updateHash();
  817. function updateHash() {
  818. query('SELECT * FROM `hash` ORDER BY `id` DESC LIMIT 1', function(err, row) {
  819. if(err) {
  820. logger.error('Cant get the hash, stopping');
  821. logger.debug(err);
  822. process.exit(0);
  823. return;
  824. }
  825. if(row.length == 0) {
  826. logger.error('Wrong hash found, stopping');
  827. process.exit(0);
  828. } else {
  829. if(hash != row[0].hash) logger.warn('Loaded hash'+row[0].hash);
  830. hash = row[0].hash;
  831. }
  832. });
  833. }
  834.  
  835. io.on('connection', function(socket) {
  836. var user = false;
  837. socket.on('hash', function(hash) {
  838. query('SELECT * FROM `users` WHERE `hash` = '+pool.escape(hash), function(err, row) {
  839. if((err) || (!row.length)) return socket.disconnect();
  840. user = row[0];
  841. users[user.steamid] = {
  842. socket: socket.id,
  843. balance: parseInt(row[0].balance)
  844. }
  845. socket.emit('message', {
  846. accept: accept,
  847. balance: row[0].balance,
  848. br: br,
  849. chat: chat,
  850. chatb: chatb,
  851. count: timer-wait,
  852. icon: row[0].avatar,
  853. maxbet: maxbet,
  854. minbet: minbet,
  855. name: row[0].name,
  856. rank: row[0].rank,
  857. rolls: historyRolls,
  858. type: 'hello',
  859. user: row[0].steamid
  860. });
  861. socket.emit('message', {
  862. type: 'logins',
  863. count: Object.size(io.sockets.connected)
  864. });
  865. currentBets.forEach(function(itm) {
  866. socket.emit('message', {
  867. type: 'bet',
  868. bet: {
  869. amount: itm.amount,
  870. betid: itm.betid,
  871. icon: itm.icon,
  872. lower: itm.lower,
  873. name: itm.name,
  874. rollid: itm.rollid,
  875. upper: itm.upper,
  876. user: itm.user,
  877. won: null
  878. },
  879. sums: {
  880. 0: currentSums['0-0'],
  881. 1: currentSums['1-7'],
  882. 2: currentSums['8-14'],
  883. }
  884. });
  885. });
  886. });
  887. });
  888. socket.on('mes', function(m) {
  889. if(!user) return;
  890. logger.debug(m);
  891. if(m.type == "bet") return setBet(m, user, socket);
  892. if(m.type == "balance") return getBalance(user, socket);
  893. if(m.type == "chat") return ch(m, user, socket);
  894. if(m.type == "plus") return plus(user, socket);
  895. });
  896. socket.on('disconnect', function() {
  897. io.sockets.emit('message', {
  898. type: 'logins',
  899. count: Object.size(io.sockets.connected)
  900. });
  901. delete users[user.steamid];
  902. })
  903. });
  904.  
  905. function plus(user, socket) {
  906. query('SELECT * FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err, row) {
  907. if(err) return;
  908. if(time() > row[0].plus) {
  909. query('UPDATE `users` SET `plus` = '+pool.escape(time()+10*60)+', `balance` = `balance` + 1 WHERE `steamid` = '+user.steamid);
  910. socket.emit('message', {
  911. type: 'alert',
  912. alert: 'Confirmed'
  913. });
  914. getBalance(user, socket);
  915. } else {
  916. socket.emit('message', {
  917. type: 'alert',
  918. alert: 'You have '+(row[0].plus-time())+' to accept'
  919. });
  920. }
  921. });
  922. }
  923.  
  924. function ch(m, user, socket) {
  925. if(m.msg) {
  926. if(last_message[user.steamid]+1 >= time()) {
  927. console.log('Too fast');
  928. return;
  929. } else {
  930. last_message[user.steamid] = time();
  931. }
  932. var res = null;
  933. if (res = /^\/send ([0-9]*) ([0-9]*)/.exec(m.msg)) {
  934. logger.trace('We need to send coins from '+res[2]+' to '+res[1]);
  935. query('SELECT `balance` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err, row) {
  936. if((err) || (!row.length)) {
  937. logger.error('Failed to get the person in the database');
  938. logger.debug(err);
  939. socket.emit('message', {
  940. type: 'error',
  941. enable: false,
  942. error: 'Error: User not in DB.'
  943. });
  944. return;
  945. }
  946. if(row[0].balance < res[2]) {
  947. socket.emit('message', {
  948. type: 'error',
  949. enable: false,
  950. error: 'Error: Insufficient funds.'
  951. });
  952. } else if(res[2] <= 0) {
  953. socket.emit('message', {
  954. type: 'error',
  955. enable: false,
  956. error: 'Error: Amount must be greater than 0.'
  957. });
  958. } else {
  959. query('SELECT `name` FROM `users` WHERE `steamid` = '+pool.escape(res[1]), function(err2, row2) {
  960. if((err) || (!row.length)) {
  961. logger.error('Failed to get the STEAMID');
  962. logger.debug(err);
  963. socket.emit('message', {
  964. type: 'error',
  965. enable: false,
  966. error: 'Error: Unknown receiver.'
  967. });
  968. return;
  969. }
  970. query('UPDATE `users` SET `balance` = `balance` - '+res[2]+' WHERE `steamid` = '+pool.escape(user.steamid));
  971. query('UPDATE `users` SET `balance` = `balance` + '+res[2]+' WHERE `steamid` = '+pool.escape(res[1]));
  972. query('INSERT INTO `transfers` SET `from1` = '+pool.escape(user.steamid)+', `to1` = '+pool.escape(res[1])+', `amount` = '+pool.escape(res[2])+', `time` = '+pool.escape(time()));
  973. socket.emit('message', {
  974. type: 'alert',
  975. alert: 'You sent '+res[2]+' coins to '+row2[0].name+'.'
  976. });
  977. getBalance(user, socket);
  978. });
  979. }
  980. });
  981. } else if (res = /^\/mute ([0-9]*) ([0-9]*)/.exec(m.msg)) {
  982. if(user.rank > 0) {
  983. var t = time();
  984. query('UPDATE `users` SET `mute` = '+pool.escape(parseInt(t)+parseInt(res[2]))+' WHERE `steamid` = '+pool.escape(res[1]));
  985. socket.emit('message', {
  986. type: 'alert',
  987. alert: 'You mute '+res[1]+' to '+res[2]
  988. });
  989. }
  990. } else {
  991.  
  992. query('SELECT `mute` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err, row) {
  993. if(err) return;
  994. if(row[0].mute > time()) {
  995. socket.emit('message', {
  996. type: 'alert',
  997. alert: 'You are muted '+(row[0].mute-time())
  998. });
  999. return;
  1000. }
  1001. io.sockets.emit('message', {
  1002. type: 'chat',
  1003. msg: safe_tags_replace(m.msg),
  1004. name: user.name,
  1005. icon: user.avatar,
  1006. user: user.steamid,
  1007. rank: user.rank,
  1008. lang: m.lang,
  1009. hide: m.hide
  1010. });
  1011. });
  1012. }
  1013. }
  1014. }
  1015.  
  1016. function getBalance(user, socket) {
  1017. query('SELECT `balance` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err, row) {
  1018. if((err) || (!row.length)) {
  1019. logger.error('Failed to load your balance');
  1020. logger.debug(err);
  1021. socket.emit('message', {
  1022. type: 'error',
  1023. enable: true,
  1024. error: 'Error: You are not DB.'
  1025. });
  1026. return;
  1027. }
  1028. socket.emit('message', {
  1029. type: 'balance',
  1030. balance: row[0].balance
  1031. });
  1032. if(user.steamid) users[user.steamid].balance = parseInt(row[0].balance);
  1033. })
  1034. }
  1035.  
  1036. function setBet(m, user, socket) {
  1037. if((usersBr[user.steamid] !== undefined) && (usersBr[user.steamid] == br)) {
  1038. socket.emit('message', {
  1039. type: 'error',
  1040. enable: true,
  1041. error: 'You\'ve already placed '+usersBr[user.steamid]+'/'+br+' bets this roll.'
  1042. });
  1043. return;
  1044. }
  1045. if((m.amount < minbet) || (m.amount > maxbet)) {
  1046. socket.emit('message', {
  1047. type: 'error',
  1048. enable: true,
  1049. error: 'Invalid bet amount.'
  1050.  
  1051. });
  1052. return;
  1053. }
  1054. if(pause) {
  1055. socket.emit('message', {
  1056. type: 'error',
  1057. enable: false,
  1058. error: 'Betting for this round is closed.'
  1059. });
  1060. return;
  1061. }
  1062. if(m.upper - m.lower > 6){
  1063. logger.warn("User tried to place an invalid bid!! (Might be hacking)");
  1064. return;
  1065. } else {
  1066. if(m.lower != 0 && m.lower != 1 && m.lower != 8){
  1067. logger.warn("User is trying some weird offset!! (Might be hacking)");
  1068. return;
  1069. }
  1070. if(m.lower == 0){
  1071. m.upper = 0;
  1072. } else {
  1073. m.upper = m.lower + 6;
  1074. }
  1075. }
  1076. var start_time = new Date();
  1077. query('SELECT `balance` FROM `users` WHERE `steamid` = '+pool.escape(user.steamid), function(err, row) {
  1078. if((err) || (!row.length)) {
  1079. logger.error('Failed to find DB');
  1080. logger.debug(err);
  1081. socket.emit('message', {
  1082. type: 'error',
  1083. enable: true,
  1084. error: 'You are not DB'
  1085. });
  1086. return;
  1087. }
  1088. if(row[0].balance >= m.amount) {
  1089. query('UPDATE `users` SET `balance` = `balance` - '+parseInt(m.amount)+' WHERE `steamid` = '+pool.escape(user.steamid), function(err2, row2) {
  1090. if(err2) {
  1091. logger.error('Error in withdraw');
  1092. logger.debug(err);
  1093. socket.emit('message', {
  1094. type: 'error',
  1095. enable: true,
  1096. error: 'You dont have enough points'
  1097. });
  1098. return;
  1099. }
  1100. 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) {
  1101. if(err3) {
  1102. logger.error('Error in DB');
  1103. logger.debug(err);
  1104. return;
  1105. }
  1106. var end = new Date();
  1107. if(usersBr[user.steamid] === undefined) {
  1108. usersBr[user.steamid] = 1;
  1109. } else {
  1110. usersBr[user.steamid]++;
  1111. }
  1112. if(usersAmount[user.steamid] === undefined) {
  1113. usersAmount[user.steamid] = {
  1114. '0-0': 0,
  1115. '1-7': 0,
  1116. '8-14': 0
  1117. };
  1118. }
  1119. usersAmount[user.steamid][m.lower+'-'+m.upper] += parseInt(m.amount);
  1120. currentSums[m.lower+'-'+m.upper] += m.amount;
  1121. socket.emit('message', {
  1122. type: 'betconfirm',
  1123. bet: {
  1124. betid: row3.insertId,
  1125. lower: m.lower,
  1126. upper: m.upper,
  1127. amount: usersAmount[user.steamid][m.lower+'-'+m.upper]
  1128. },
  1129. balance: row[0].balance-m.amount,
  1130. mybr: usersBr[user.steamid],
  1131. br: br,
  1132. exec: (end.getTime()-start_time.getTime()).toFixed(3)
  1133. });
  1134. users[user.steamid].balance = row[0].balance-m.amount;
  1135. io.sockets.emit('message', {
  1136. type: 'bet',
  1137. bet: {
  1138. amount: usersAmount[user.steamid][m.lower+'-'+m.upper],
  1139. betid: row3.insertId,
  1140. icon: user.avatar,
  1141. lower: m.lower,
  1142. name: user.name,
  1143. rollid: currentRollid,
  1144. upper: m.upper,
  1145. user: user.steamid,
  1146. won: null
  1147. },
  1148. sums: {
  1149. 0: currentSums['0-0'],
  1150. 1: currentSums['1-7'],
  1151. 2: currentSums['8-14'],
  1152. }
  1153. });
  1154. currentBets.push({
  1155. amount: m.amount,
  1156. betid: row3.insertId,
  1157. icon: user.avatar,
  1158. lower: m.lower,
  1159. name: user.name,
  1160. rollid: currentRollid,
  1161. upper: m.upper,
  1162. user: user.steamid,
  1163. });
  1164. logger.debug('Bet #'+row3.insertId+' Ammount: '+m.amount);
  1165. checkTimer();
  1166. })
  1167. });
  1168. } else {
  1169. socket.emit('message', {
  1170. type: 'error',
  1171. enable: true,
  1172. error: 'You dont have any money'
  1173. });
  1174. }
  1175. });
  1176. }
  1177.  
  1178. function checkTimer() {
  1179. if((currentBets.length > 0) && (timer == -1) && (!pause)) {
  1180. logger.trace('Timer starting');
  1181. timer = accept+wait;
  1182. timerID = setInterval(function() {
  1183. logger.trace('Timer: '+timer+' Site timer: '+(timer-wait));
  1184. if (timer == wait) {
  1185. pause = true;
  1186. logger.trace('Pause included');
  1187. var inprog = getRandomInt(0, (currentBets.length/4).toFixed(0));
  1188. io.sockets.emit('message', {
  1189. type: 'preroll',
  1190. totalbets: currentBets.length-inprog,
  1191. inprog: inprog,
  1192. sums: {
  1193. 0: currentSums['0-0'],
  1194. 1: currentSums['1-7'],
  1195. 2: currentSums['8-14'],
  1196. }
  1197. });
  1198. }
  1199. if (timer == wait-2) {
  1200. logger.trace('Timer: ');
  1201. toWin(); // Выбираем победителя
  1202. }
  1203. if(timer == 0) {
  1204. logger.trace('Reset');
  1205. timer = accept+wait;
  1206. currentBets = [];
  1207. historyRolls.push({id: currentRollid, roll: roll});
  1208. if(historyRolls.length > 10) historyRolls.slice(1);
  1209. usersBr = {}; // сколько пользователи внесли
  1210. usersAmount = {}; // сколько пользователи внесли монеток
  1211. currentSums = {
  1212. '0-0': 0,
  1213. '1-7': 0,
  1214. '8-14': 0
  1215. };
  1216. currentRollid = currentRollid+1;
  1217. pause = false;
  1218. }
  1219. timer--;
  1220. }, 1000);
  1221. }
  1222. }
  1223.  
  1224. function toWin() {
  1225. var sh = sha256(hash+'-'+currentRollid);
  1226. roll = sh.substr(0, 8);
  1227. roll = parseInt(roll, 16);
  1228. roll = math.abs(roll) % 15;
  1229. logger.trace('Rolled '+roll);
  1230. var r = '';
  1231. var s = q1;
  1232. var wins = {
  1233. '0-0': 0,
  1234. '1-7': 0,
  1235. '8-14': 0
  1236. }
  1237. if(roll == 0) { r = '0-0'; s = q2; wins['0-0'] = currentSums['0-0']*s; }
  1238. if((roll > 0) && (roll < 8)) { r = '1-7'; wins['1-7'] = currentSums['1-7']*s; }
  1239. if((roll > 7) && (roll < 15)) { r = '8-14'; wins['8-14'] = currentSums['8-14']*s; }
  1240. logger.debug(currentBets);
  1241. logger.debug(usersBr);
  1242. logger.debug(usersAmount);
  1243. logger.debug(currentSums);
  1244. for(key in users) {
  1245. if(usersAmount[key] === undefined) {
  1246. var balance = null;
  1247. var won = 0;
  1248. } else {
  1249. var balance = parseInt(users[key].balance)+usersAmount[key][r]*s;
  1250. var won = usersAmount[key][r]*s;
  1251. }
  1252. if (io.sockets.connected[users[key].socket]) io.sockets.connected[users[key].socket].emit('message', {
  1253. balance: balance,
  1254. count: accept,
  1255. nets: [{
  1256. lower: 0,
  1257. samount: currentSums['0-0'],
  1258. swon: wins['0-0'],
  1259. upper: 0
  1260. }, {
  1261. lower: 1,
  1262. samount: currentSums['1-7'],
  1263. swon: wins['1-7'],
  1264. upper: 7
  1265. }, {
  1266. lower: 8,
  1267. samount: currentSums['8-14'],
  1268. swon: wins['8-14'],
  1269. upper: 14
  1270. }
  1271. ],
  1272. roll: roll,
  1273. rollid: currentRollid+1,
  1274. type: "roll",
  1275. wait: wait-2,
  1276. wobble: getRandomArbitary(0, 1),
  1277. won: won
  1278. });
  1279. }
  1280. currentBets.forEach(function(itm) {
  1281. if((roll >= itm.lower) && (roll <= itm.upper)) {
  1282. logger.debug('Rate #'+itm.betid+' sum '+itm.amount+' win '+(itm.amount*s));
  1283. query('UPDATE `users` SET `balance` = `balance` + '+itm.amount*s+' WHERE `steamid` = '+pool.escape(itm.user));
  1284. }
  1285. });
  1286. query('UPDATE `rolls` SET `roll` = '+pool.escape(roll)+', `hash` = '+pool.escape(hash)+', `time` = '+pool.escape(time())+' WHERE `id` = '+pool.escape(currentRollid));
  1287. query('INSERT INTO `rolls` SET `roll` = -1');
  1288. updateHash();
  1289. }
  1290.  
  1291.  
  1292.  
  1293.  
  1294.  
  1295.  
  1296.  
  1297.  
  1298.  
  1299. /* */
  1300. var tagsToReplace = {
  1301. '&': '&amp;',
  1302. '<': '&lt;',
  1303. '>': '&gt;'
  1304. };
  1305.  
  1306. function replaceTag(tag) {
  1307. return tagsToReplace[tag] || tag;
  1308. }
  1309.  
  1310. function safe_tags_replace(str) {
  1311. return str.replace(/[&<>]/g, replaceTag);
  1312. }
  1313. Object.size = function(obj) {
  1314. var size = 0,
  1315. key;
  1316. for (key in obj) {
  1317. if (obj.hasOwnProperty(key)) size++;
  1318. }
  1319. return size;
  1320. };
  1321. function getRandomInt(min, max) {
  1322. return Math.floor(Math.random() * (max - min + 1)) + min;
  1323. }
  1324. function getRandomArbitary(min, max) {
  1325. return Math.random() * (max - min) + min;
  1326. }
  1327.  
  1328. function query(sql, callback) {
  1329. if (typeof callback === 'undefined') {
  1330. callback = function() {};
  1331. }
  1332. pool.getConnection(function(err, connection) {
  1333. if(err) return callback(err);
  1334. logger.info('DB Connection ID: '+connection.threadId);
  1335. connection.query(sql, function(err, rows) {
  1336. if(err) return callback(err);
  1337. connection.release();
  1338. return callback(null, rows);
  1339. });
  1340. });
  1341. }
  1342. function load() {
  1343. query('SET NAMES utf8');
  1344. query('SELECT `id` FROM `rolls` ORDER BY `id` DESC LIMIT 1', function(err, row) {
  1345. if((err) || (!row.length)) {
  1346. logger.error('Cant get number from the last game');
  1347. logger.debug(err);
  1348. process.exit(0);
  1349. return;
  1350. }
  1351. currentRollid = row[0].id;
  1352. logger.trace('Roll '+currentRollid);
  1353. });
  1354. loadHistory();
  1355. setTimeout(function() { io.listen(8080); }, 3000);
  1356. }
  1357. function loadHistory() {
  1358. query('SELECT * FROM `rolls` ORDER BY `id` LIMIT 10', function(err, row) {
  1359. if(err) {
  1360. logger.error('Cant load betting history');
  1361. logger.debug(err);
  1362. process.exit(0);
  1363. }
  1364. logger.trace('Sucesfully updated history');
  1365. row.forEach(function(itm) {
  1366. if(itm.roll != -1) historyRolls.push(itm);
  1367. });
  1368. });
  1369. }
  1370.  
  1371. function time() {
  1372. return parseInt(new Date().getTime()/1000)
  1373. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement