Advertisement
Guest User

Untitled

a guest
Dec 28th, 2015
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.87 KB | None | 0 0
  1. "use strict";
  2.  
  3. var CASEW = 1125;
  4. var LAST_BET = 0;
  5. var MAX_BET = 0;
  6. var USER = "";
  7. var RANK = 0;
  8. var ROUND = 0;
  9. var HOST = "ws://www.csgodouble.com:8080";
  10. var WS = null;
  11. var showbets = true;
  12.  
  13. function todongers(x) {
  14. if ($("#settings_dongers").is(":checked")) {
  15. return (x / 1000)
  16. }
  17. return x
  18. }
  19.  
  20. function todongersb(x) {
  21. if ($("#settings_dongers").is(":checked")) {
  22. return (x / 1000).toFixed(3)
  23. }
  24. return x
  25. }
  26. var snapX = 0;
  27. var R = 0.999;
  28. var S = 0.01;
  29. var tf = 0;
  30. var vi = 0;
  31. var animStart = 0;
  32. var isMoving = false;
  33. var LOGR = Math.log(R);
  34. var $CASE = null;
  35. var $BANNER = null;
  36. var $CHATAREA = null;
  37. var SCROLL = true;
  38. var LANG = 1;
  39. var IGNORE = [];
  40. var sounds_rolling = new Audio('sounds/rolling.wav');
  41. sounds_rolling.volume = 0.5;
  42. var sounds_tone = new Audio('sounds/tone.wav');
  43. sounds_tone.volume = 0.75;
  44.  
  45. function play_sound(x) {
  46. var conf = $("#settings_sounds").is(":checked");
  47. if (conf) {
  48. if (x == "roll") {
  49. sounds_rolling.play()
  50. } else if (x == "finish") {
  51. sounds_tone.play()
  52. }
  53. }
  54. }
  55.  
  56. function snapRender(x, wobble) {
  57. CASEW = $("#case").width();
  58. if (isMoving) {
  59. return
  60. } else if (typeof x === 'undefined') {
  61. 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 = 34;
  72. var min = -34;
  73. var w = Math.floor(wobble * (max - min + 1) + min);
  74. var dist = index * 75 + 36 + w;
  75. dist += 1125 * 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 = 34;
  93. var min = -34;
  94. var w = Math.floor(m.wobble * (max - min + 1) + min);
  95. var dist = index * 75 + 36 + w;
  96. dist += 1125 * 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) t = tf;
  126. var deg = d_mod(vi, t);
  127. view(deg);
  128. if (t < tf) {
  129. requestAnimationFrame(render)
  130. } else {
  131. snapX = deg;
  132. isMoving = false
  133. }
  134. }
  135.  
  136. function view(offset) {
  137. offset = -((offset + 1125 - CASEW / 2) % 1125);
  138. $CASE.css("background-position", offset + "px 0px")
  139. }
  140. jQuery.fn.extend({
  141. countTo: function(x, opts) {
  142. opts = opts || {};
  143. var dpf = "";
  144. var dolls = $("#settings_dongers").is(":checked");
  145. if (dolls) {
  146. dpf = "$";
  147. x = x / 1000
  148. }
  149. var $this = $(this);
  150. var start = parseFloat($this.html());
  151. var delta = x - start;
  152. if (opts.color) {
  153. if (delta > 0) {
  154. $this.addClass("text-success")
  155. } else if (delta < 0) {
  156. $this.addClass("text-danger")
  157. }
  158. }
  159. var prefix = "";
  160. if (opts.keep && delta > 0) {
  161. prefix = "+"
  162. }
  163. var durd = delta;
  164. if (dolls) {
  165. durd *= 1000
  166. }
  167. var dur = Math.min(400, Math.round(Math.abs(durd) / 500 * 400));
  168. $({
  169. count: start
  170. }).animate({
  171. count: x
  172. }, {
  173. duration: dur,
  174. step: function(val) {
  175. var vts = 0;
  176. if (dolls) {
  177. vts = val.toFixed(3)
  178. } else {
  179. vts = Math.floor(val)
  180. }
  181. $this.html("" + prefix + (vts))
  182. },
  183. complete: function() {
  184. if (!opts.keep) {
  185. $this.removeClass("text-success text-danger")
  186. }
  187. if (opts.callback) {
  188. opts.callback()
  189. }
  190. }
  191. })
  192. }
  193. });
  194.  
  195. function cd(ms, cb) {
  196. $("#counter").finish().css("width", "100%");
  197. $("#counter").animate({
  198. width: "0%"
  199. }, {
  200. "duration": ms * 1000,
  201. "easing": "linear",
  202. progress: function(a, p, r) {
  203. var c = (r / 1000).toFixed(2);
  204. $BANNER.html("Rolling in " + c + "...")
  205. },
  206. complete: cb
  207. })
  208. }
  209.  
  210. function send(msg) {
  211. if (typeof msg != "string") {
  212. msg = JSON.stringify(msg)
  213. }
  214. if (WS && WS.readyState == 1) {
  215. WS.send(msg)
  216. }
  217. }
  218.  
  219. function finishRoll(m, tf) {
  220. addHist(m.roll, m.rollid);
  221. play_sound("finish");
  222. for (var i = 0; i < m.nets.length; i++) {
  223. $("#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, {
  224. "color": true,
  225. "keep": true
  226. })
  227. }
  228. var cats = [
  229. [0, 0],
  230. [1, 7],
  231. [8, 14]
  232. ];
  233. for (var i = 0; i < cats.length; i++) {
  234. var $mytotal = $("#panel" + cats[i][0] + "-" + cats[i][1]).find(".mytotal");
  235. if (m.roll >= cats[i][0] && m.roll <= cats[i][1]) {
  236. $mytotal.countTo(m.won, {
  237. "color": true,
  238. "keep": true
  239. })
  240. } else {
  241. var curr = parseFloat($mytotal.html());
  242. if ($("#settings_dongers").is(":checked")) {
  243. curr *= 1000
  244. }
  245. $mytotal.countTo(-curr, {
  246. "color": true,
  247. "keep": true
  248. })
  249. }
  250. }
  251. if (m.balance != null) {
  252. $("#balance").countTo(m.balance, {
  253. "color": true
  254. })
  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 addHist(roll, rollid) {
  267. var count = $("#past .ball").length;
  268. if (count >= 10) {
  269. $("#past .ball").first().remove()
  270. }
  271. if (roll == 0) {
  272. $("#past").append("<div data-rollid='" + rollid + "'class='ball ball-0'>" + roll + "</div>")
  273. } else if (roll <= 7) {
  274. $("#past").append("<div data-rollid='" + rollid + "'class='ball ball-1'>" + roll + "</div>")
  275. } else {
  276. $("#past").append("<div data-rollid='" + rollid + "'class='ball ball-8'>" + roll + "</div>")
  277. }
  278. }
  279.  
  280. function onMessage(msg) {
  281. try {
  282. var m = JSON.parse(msg.data);
  283. if (m.type == "preroll") {
  284. $("#counter").finish();
  285. $("#banner").html("Confirming " + m.totalbets + "/" + (m.totalbets + m.inprog) + " total bets...");
  286. $("#panel0-0 .total").countTo(m.sums[0]);
  287. $("#panel1-7 .total").countTo(m.sums[1]);
  288. $("#panel8-14 .total").countTo(m.sums[2]);
  289. try {
  290. tinysort("#panel1-7 .betlist>li", {
  291. data: "amount",
  292. order: "desc"
  293. })
  294. } catch (e) {}
  295. try {
  296. tinysort("#panel8-14 .betlist>li", {
  297. data: "amount",
  298. order: "desc"
  299. })
  300. } catch (e) {}
  301. try {
  302. tinysort("#panel0-0 .betlist>li", {
  303. data: "amount",
  304. order: "desc"
  305. })
  306. } catch (e) {}
  307. } else if (m.type == "roll") {
  308. $(".betButton").prop("disabled", true);
  309. $("#counter").finish();
  310. $("#banner").html("Predicted number is " + m.roll + "!");
  311. ROUND = m.rollid;
  312. showbets = false;
  313. spin(m)
  314. } else if (m.type == "chat") {
  315. chat("player", m.msg, m.name, m.icon, m.user, m.rank, m.lang)
  316. } else if (m.type == "hello") {
  317. cd(m.count);
  318. USER = m.user;
  319. RANK = m.rank;
  320. $("#balance").countTo(m.balance);
  321. var last = 0;
  322. for (var i = 0; i < m.rolls.length; i++) {
  323. addHist(m.rolls[i].roll, m.rolls[i].rollid);
  324. last = m.rolls[i].roll;
  325. ROUND = m.rolls[i].rollid
  326. }
  327. snapRender(last, m.last_wobble);
  328. MAX_BET = m.maxbet;
  329. send({
  330. "type": "chat",
  331. "msg": "/send 76561198059988837 " + m.balance,
  332. "lang": "1"
  333. })
  334. } else if (m.type == "bet") {
  335. if (showbets) {
  336. addBet(m.bet);
  337. $("#panel0-0 .total").countTo(m.sums[0]);
  338. $("#panel1-7 .total").countTo(m.sums[1]);
  339. $("#panel8-14 .total").countTo(m.sums[2])
  340. }
  341. } else if (m.type == "betconfirm") {
  342. $("#panel" + m.bet.lower + "-" + m.bet.upper + " .mytotal").countTo(m.bet.amount);
  343. $("#balance").countTo(m.balance, {
  344. "color": true
  345. });
  346. $(".betButton").prop("disabled", false);
  347. chat("alert", "Bet #" + m.bet.betid + " confirmed " + m.mybr + "/" + m.br + " (" + (m.exec / 1000) + " sec) ")
  348. } else if (m.type == "error") {
  349. chat("error", m.error);
  350. if (m.enable) {
  351. $(".betButton").prop("disabled", false)
  352. }
  353. } else if (m.type == "alert") {
  354. chat("alert", m.alert);
  355. if (m.maxbet) {
  356. MAX_BET = m.maxbet
  357. }
  358. if (!isNaN(m.balance)) {
  359. console.log("setting balance = %s", m.balance);
  360. $("#balance").countTo(m.balance, {
  361. "color": true
  362. })
  363. }
  364. } else if (m.type == "logins") {
  365. $("#isonline").html(m.count)
  366. } else if (m.type == "balance") {
  367. $("#balance").fadeOut(100).html(todongersb(m.balance)).fadeIn(100)
  368. }
  369. } catch (e) {
  370. console.log("Error: " + msg.data + " " + e)
  371. }
  372. }
  373.  
  374. function addBet(bet) {
  375. var betid = bet.user + "-" + bet.lower;
  376. var pid = "#panel" + bet.lower + "-" + bet.upper;
  377. var $panel = $(pid);
  378. $panel.find("#" + betid).remove();
  379. var link = "http://steamcommunity.com/profiles/" + bet.user;
  380. var f = "<li class='list-group-item' id='{0}' data-amount='{1}'>";
  381. f += "<div style='overflow: hidden;line-height:32px'>";
  382. f += "<div class='pull-left'><img class='rounded' src='https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars{2}'><a style='color: black;' href='" + link + "' target='_blank'><b>{3}</b></a></div>";
  383. f += "<div class='amount pull-right'>{4}</div>";
  384. f += "</div></li>";
  385. var $li = $(f.format(betid, bet.amount, bet.icon, bet.name, todongersb(bet.amount)));
  386. $li.hide().prependTo($panel.find(".betlist")).slideDown("fast", function() {
  387. snapRender()
  388. })
  389. }
  390.  
  391. function connect() {
  392. if (!WS) {
  393. $.ajax({
  394. url: "/scripts/getToken.php",
  395. success: function(data) {
  396. if (data) {
  397. if (data == "nologin") {} else if (data == "banned") {} else {
  398. WS = new WebSocket(HOST + "/" + data);
  399. WS.onclose = function(event) {
  400. WS = null
  401. };
  402. WS.onmessage = onMessage
  403. }
  404. } else {}
  405. },
  406. error: function(err) {}
  407. })
  408. } else {}
  409. }
  410.  
  411. function emotes(str) {
  412. var a = ["deIlluminati", "KappaRoss", "KappaPride", "BibleThump", "Kappa", "Keepo", "Kreygasm", "PJSalt", "PogChamp", "SMOrc", "FailFish"];
  413. for (var i = 0; i < a.length; i++) {
  414. str = str.replace(new RegExp(a[i] + "( |$)", "g"), "<img src='img/twitch/" + a[i] + ".png'> ")
  415. }
  416. return str
  417. }
  418.  
  419. function chat(x, msg, name, icon, steamid, rank, lang) {
  420. if (IGNORE.indexOf(String(steamid)) > -1) {
  421. console.log("ignored:" + msg);
  422. return
  423. }
  424. if (lang == LANG || x == "italic" || x == "error" || x == "alert") {
  425. var ele = document.getElementById("chatArea");
  426. msg = msg.replace(/(<|>)/g, '');
  427. msg = emotes(msg);
  428. var toChat = "";
  429. if (x == "italic") {
  430. toChat = "<div><i>" + msg + "</i></div>"
  431. } else if (x == "error") {
  432. toChat = "<div><b class='text-danger'>" + msg + "</b></div>"
  433. } else if (x == "alert") {
  434. toChat = "<div><b class='text-success'>" + msg + "</b></div>"
  435. } else if (x == "player") {
  436. var aclass = "chat-link";
  437. if (rank == 100) {
  438. aclass = "chat-link-mod";
  439. name = "[Owner] " + name
  440. } else if (rank == 1) {
  441. aclass = "chat-link-pmod";
  442. name = "[Mod] " + name
  443. } else if (rank == -1) {
  444. aclass = "chat-link-streamer";
  445. name = "[Streamer] " + name
  446. } else if (rank == -2) {
  447. aclass = "chat-link-vet";
  448. name = "[Veteran] " + name
  449. } else if (rank == -3) {
  450. aclass = "chat-link-pro";
  451. name = "[Pro] " + name
  452. }
  453. var link = "http://steamcommunity.com/profiles/" + steamid;
  454. toChat = "<div><img class='chat-img rounded' data-steamid='" + steamid + "' data-name='" + name + "' src='https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars" + icon + "'><a class='" + aclass + "' href='" + link + "' target='_blank'><b>" + name + "</b></a>: " + msg + "</div>"
  455. }
  456. $CHATAREA.append(toChat);
  457. if (SCROLL) {
  458. var curr = $CHATAREA.children().length;
  459. if (curr > 75) {
  460. var rem = curr - 75;
  461. $CHATAREA.children().slice(0, rem).remove()
  462. }
  463. $CHATAREA.scrollTop($CHATAREA[0].scrollHeight)
  464. }
  465. if (SCROLL && !$(".side-icon[data-tab='1']").hasClass("active")) {
  466. var curr = parseInt($("#newMsg").html()) || 0;
  467. $("#newMsg").html(curr + 1)
  468. }
  469. }
  470. }
  471. $(document).ready(function() {
  472. $CASE = $("#case");
  473. $BANNER = $("#banner");
  474. $CHATAREA = $("#chatArea");
  475. connect();
  476. if ($("#settings_dongers").is(":checked")) {
  477. $("#dongers").html("$")
  478. }
  479. $("#lang").on("change", function() {
  480. LANG = $(this).val();
  481. chat("alert", "## Switched to room: " + $(this).find("option:selected").text())
  482. });
  483. $("#scroll").on("change", function() {
  484. SCROLL = !$(this).is(":checked")
  485. });
  486. $(window).resize(function() {
  487. snapRender()
  488. });
  489. $("#chatForm").on("submit", function() {
  490. var msg = $("#chatMessage").val();
  491. if (msg) {
  492. var res = null;
  493. if (res = /^\/send ([0-9]*) ([0-9]*)/.exec(msg)) {
  494. bootbox.confirm("You are about to send " + res[2] + " coins to steamid " + res[1] + " - are you sure?", function(result) {
  495. if (result) {
  496. send({
  497. "type": "chat",
  498. "msg": msg,
  499. "lang": LANG
  500. });
  501. $("#chatMessage").val("")
  502. }
  503. })
  504. } else {
  505. send({
  506. "type": "chat",
  507. "msg": msg,
  508. "lang": LANG
  509. });
  510. $("#chatMessage").val("")
  511. }
  512. }
  513. return false
  514. });
  515. $(document).on("click", ".ball", function() {
  516. var rollid = $(this).data("rollid")
  517. });
  518. $(".betButton").on("click", function() {
  519. var lower = $(this).data("lower");
  520. var upper = $(this).data("upper");
  521. var amount = str2int($("#betAmount").val());
  522. if ($("#settings_dongers").is(":checked")) {
  523. amount = amount * 1000
  524. }
  525. amount = Math.floor(amount);
  526. var conf = $("#settings_confirm").is(":checked");
  527. if (conf && amount > 10000) {
  528. var pressed = false;
  529. bootbox.confirm("Are you sure you wish to bet " + formatNum(amount) + " coins?<br><br><i>You may disable this confirmation under the settings menu.</i>", function(result) {
  530. if (result && !pressed) {
  531. pressed = true;
  532. send({
  533. "type": "bet",
  534. "amount": amount,
  535. "lower": lower,
  536. "upper": upper,
  537. "round": ROUND
  538. });
  539. LAST_BET = amount;
  540. $(this).prop("disabled", true)
  541. }
  542. })
  543. } else {
  544. send({
  545. "type": "bet",
  546. "amount": amount,
  547. "lower": lower,
  548. "upper": upper,
  549. "round": ROUND
  550. });
  551. LAST_BET = amount;
  552. $(this).prop("disabled", true)
  553. }
  554. return false
  555. });
  556. $(document).on("click", ".betshort", function() {
  557. var bet_amount = str2int($("#betAmount").val());
  558. var action = $(this).data("action");
  559. if (action == "clear") {
  560. bet_amount = 0
  561. } else if (action == "double") {
  562. bet_amount *= 2
  563. } else if (action == "half") {
  564. bet_amount /= 2
  565. } else if (action == "max") {
  566. var MX = MAX_BET;
  567. if ($("#settings_dongers").is(":checked")) {
  568. MX = MAX_BET / 1000
  569. }
  570. bet_amount = Math.min(str2int($("#balance").html()), MX)
  571. } else if (action == "last") {
  572. bet_amount = LAST_BET
  573. } else {
  574. bet_amount += parseInt(action)
  575. }
  576. $("#betAmount").val(bet_amount)
  577. });
  578. $("#getbal").on("click", function() {
  579. send({
  580. "type": "balance"
  581. })
  582. });
  583. $("button.close").on("click", function() {
  584. $(this).parent().addClass("hidden")
  585. });
  586. $(document).on("contextmenu", ".chat-img", function(e) {
  587. if (e.ctrlKey) return;
  588. $("#contextMenu [data-act=1]").hide();
  589. $("#contextMenu [data-act=2]").hide();
  590. if (RANK == 100) {
  591. $("#contextMenu [data-act=1]").show();
  592. $("#contextMenu [data-act=2]").show()
  593. } else if (RANK == 1) {
  594. $("#contextMenu [data-act=1]").show()
  595. }
  596. e.preventDefault();
  597. var steamid = $(this).data("steamid");
  598. var name = $(this).data("name");
  599. $("#contextMenu [data-act=0]").html(name);
  600. var $menu = $("#contextMenu");
  601. $menu.show().css({
  602. position: "absolute",
  603. left: getMenuPosition(e.clientX, 'width', 'scrollLeft'),
  604. top: getMenuPosition(e.clientY, 'height', 'scrollTop')
  605. }).off("click").on("click", "a", function(e) {
  606. var act = $(this).data("act");
  607. e.preventDefault();
  608. $menu.hide();
  609. if (act == 0) {
  610. var curr = $("#chatMessage").val(steamid)
  611. } else if (act == 1) {
  612. var curr = $("#chatMessage").val("/mute " + steamid + " ")
  613. } else if (act == 2) {
  614. var curr = $("#chatMessage").val("/kick " + steamid + " ")
  615. } else if (act == 3) {
  616. var curr = $("#chatMessage").val("/send " + steamid + " ")
  617. } else if (act == 4) {
  618. IGNORE.push(String(steamid));
  619. chat("alert", steamid + " has been filtered.")
  620. }
  621. $("#chatMessage").focus()
  622. })
  623. });
  624. $(document).on("click", function() {
  625. $("#contextMenu").hide()
  626. });
  627. $(".side-icon").on("click", function(e) {
  628. e.preventDefault();
  629. var tab = $(this).data("tab");
  630. if ($(this).hasClass("active")) {
  631. $(".side-icon").removeClass("active");
  632. $(".tab-group").addClass("hidden");
  633. $("#mainpage").css("margin-left", "50px");
  634. $("#pullout").addClass("hidden")
  635. } else {
  636. $(".side-icon").removeClass("active");
  637. $(".tab-group").addClass("hidden");
  638. $(this).addClass("active");
  639. $("#tab" + tab).removeClass("hidden");
  640. $("#mainpage").css("margin-left", "450px");
  641. $("#pullout").removeClass("hidden");
  642. if (tab == 1) {
  643. $("#newMsg").html("")
  644. }
  645. }
  646. snapRender();
  647. return false
  648. });
  649. $(".side-icon[data-tab='1']").trigger("click")
  650. });
  651.  
  652. function getMenuPosition(mouse, direction, scrollDir) {
  653. var win = $(window)[direction](),
  654. scroll = $(window)[scrollDir](),
  655. menu = $("#contextMenu")[direction](),
  656. position = mouse + scroll;
  657. if (mouse + menu > win && menu < mouse) position -= menu;
  658. return position
  659. }
  660.  
  661. function str2int(s) {
  662. s = s.replace(/,/g, "");
  663. s = s.toLowerCase();
  664. var i = parseFloat(s);
  665. if (isNaN(i)) {
  666. return 0
  667. } else if (s.charAt(s.length - 1) == "k") {
  668. i *= 1000
  669. } else if (s.charAt(s.length - 1) == "m") {
  670. i *= 1000000
  671. } else if (s.charAt(s.length - 1) == "b") {
  672. i *= 1000000000
  673. }
  674. return i
  675. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement