Advertisement
Guest User

Untitled

a guest
Sep 29th, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 41.28 KB | None | 0 0
  1. window.MC = {};
  2.  
  3. function escapeHtml(a) {
  4. return String(a).replace(/[&<>"'\/]/g, function(a) {
  5. return entityMap[a];
  6. });
  7. }
  8.  
  9.  
  10. function updateBotCount(a, b) {
  11. Singa.localBotsAlive[a] = b;
  12. var c = Singa.serverBots;
  13. var d = 2 + Singa.serverBots;
  14. var e = 0;
  15. for (;e < 2;e++) {
  16. if (Singa.localBotsAlive[e]) {
  17. c++;
  18. }
  19. }
  20. if (0 == c) {
  21. $("#botCount").html('<font color="red">0 / ' + d + "</font>");
  22. } else {
  23. $("#botCount").html('<font color="#7FFF00">' + c + " / " + d + "</font>");
  24. }
  25. }
  26. function startLocalBots() {
  27. var a$$0 = 0;
  28. for (;a$$0 < Singa.startBotAmount;a$$0++) {
  29. Singa.localBotsAlive[a$$0] = false;
  30. Singa.localBots[a$$0] = new Worker(URL.createObjectURL(new Blob(["(" + generateBotFunction() + ")()"], {
  31. type : "text/javascript"
  32. })));
  33. Singa.localBots[a$$0].onmessage = function(a) {
  34. var b = a.data;
  35. switch(b.name) {
  36. case "add":
  37. updateBotCount(b.botID, true);
  38. addBallToMinimap(true, "bot" + b.botID, b.botName, b.x, b.y, "#FF00FF", true);
  39. break;
  40. case "remove":
  41. updateBotCount(b.botID, false);
  42. removeBallFromMinimap("bot" + b.botID);
  43. break;
  44. case "position":
  45. moveBallOnMinimap("bot" + b.botID, b.x, b.y);
  46. break;
  47. default:
  48. console.log("Unknown command received from bot");
  49. }
  50. };
  51. Singa.localBots[a$$0].postMessage({
  52. name : "botID",
  53. botID : a$$0
  54. });
  55. }
  56. updateBotNames();
  57. }
  58. function startRemoteBots() {
  59. var a = 0;
  60. for (;a < 3;a++) {
  61. Singa.remoteBots[a] = new Worker(URL.createObjectURL(new Blob(["(" + generateBotFunction() + ")()"], {
  62. type : "text/javascript"
  63. })));
  64. }
  65. }
  66. function sendLocalBotsMessage(a) {
  67. for (i in Singa.localBots) {
  68. Singa.localBots[i].postMessage(a);
  69. }
  70. }
  71. function sendRemoteBotsMessage(a) {
  72. for (i in Singa.remoteBots) {
  73. Singa.remoteBots[i].postMessage(a);
  74. }
  75. }
  76. function insertCore() {
  77. var f = new XMLHttpRequest;
  78. f.open("GET", "/agario.core.js", true);
  79. f.onload = function() {
  80. var script = f.responseText;
  81. script = replaceNormalFile(script, "if(h.MC&&h.MC.onPlayerSpawn)", "Singa.playerSpawned();if(h.MC&&h.MC.onPlayerSpawn)");
  82. script = replaceNormalFile(script, "if(h.MC&&h.MC.onPlayerDeath)", "Singa.playerDied();if(h.MC&&h.MC.onPlayerDeath)");
  83. script = replaceNormalFile(script, "if(h.MC&&h.MC.onAgarioCoreLoaded)", "Singa.onAgarioCoreLoaded();if(h.MC&&h.MC.onAgarioCoreLoaded)");
  84. script = replaceNormalFile(script, "if(h.MC&&h.MC.onDisconnect)", "Singa.playerDisconnected();if(h.MC&&h.MC.onDisconnect)");
  85. script = replaceNormalFile(script, "connect:function(a){", "connect:function(a){Singa.playerConnected(a);");
  86. script = replaceNormalFile(script, "sendSpectate:function(){", "sendSpectate:function(){Singa.playerSpectated();");
  87. script = replaceNormalFile(script, "sendNick:function(a){", "sendNick:function(a){Singa.updateNickname(a);");
  88. script = replaceNormalFile(script, "setTarget:function(a,b){", "setTarget:function(a,b){if(Singa.stopMovement){a = $('#canvas').width() / 2; b = $('#canvas').height() / 2;}");
  89. script = replaceRegexFile(script, /(\w\[\w\+(\d+)>>3]=(\w);\w\[\w\+(\d+)>>3]=(\w);\w\[\w\+(\d+)>>3]=(\w);\w\[\w\+(\d+)>>3]=(\w);)/i, "$1 if(Singa.setMapCoords){Singa.setMapCoords($3,$5,$7,$9,$2,$8);}");
  90. script = replaceRegexFile(script, /([\w$]+\(\d+,\w\[\w>>2\]\|0,(\+\w),(\+\w)\)\|0;[\w$]+\(\d+,\w\[\w>>2\]\|0,\+-(\+\w\[\w\+\d+>>3\]),\+-(\+\w\[\w\+\d+>>3\])\)\|0;)/i, "$1 Singa.playerX=$4; Singa.playerY=$5;");
  91. script = replaceRegexFile(script, /if\((\+\w\[\w>>3\])<1\.0\){/i, "if($1 < Singa.zoomResetValue){");
  92. script = replaceRegexFile(script, /(if\(\w<=)(20\.0)(\){\w=\w;return})(if\(!\w\){if\(\(\w\[\d+\]\|0\)!=\(\w\[\d+\]\|0\)\){\w=\w;return}if\(\(\w\[\w\+\d+>>0\]\|0\)!=0\?\(\w\[\w>>0\]\|0\)==0:0\){\w=\w;return}})/i, "$140.0$3");
  93. script = replaceRegexFile(script, /(\w)(=\+\w\[\w>>3\]\*\+\w\()(.\d)(,\+\w\);)/i, "$1$2 (Singa.zoomSpeedValue||0.9) $4 Singa.zoomValue=$1;");
  94. script = replaceRegexFile(script, /(\w=\w\[\w>>2\]\|0;)((\w\[\w>>3\])=(\w);)(\w\[\w>>0\]=a\[\w>>0\];)/i, "$1 if(!Singa.autoZoom){$3 = Singa.zoomValue;}else{$2}$5");
  95. script = replaceRegexFile(script, /((\w)=(\+\(\(\w\[\w\+\d+>>\d.*;)(\w)=(\+\(\(\w\[.*\/2\|\d\)\|0\)\/\w\+\s\+\w\[\w\+\d+>>3\];).*\4=\4<\w\?\w:\w;)/, "Singa.mouseX = $3 Singa.mouseY = $5 $1");
  96. eval(script);
  97. };
  98. f.send();
  99. }
  100. function MinimapBall(a, b, c, d, e, f) {
  101. this.isDefault = a;
  102. this.name = b;
  103. this.x = c;
  104. this.y = d;
  105. this.lastX = c;
  106. this.lastY = d;
  107. this.color = e;
  108. this.visible = f;
  109. }
  110. function drawMinimap() {
  111. if (null != miniMap ? minimapCtx.clearRect(0, 0, 200, 200) : (miniMap = document.getElementById("minimap"), minimapCtx = miniMap.getContext("2d"), miniMap.width = 400, miniMap.height = 400, miniMap.style.width = "200px", miniMap.style.height = "200px", minimapCtx.scale(2, 2)), Singa.mapOffsetFixed && Singa.drawMinimap) {
  112. minimapCtx.globalAlpha = 0.4;
  113. minimapCtx.fillStyle = "#000000";
  114. minimapCtx.fillRect(0, 0, miniMap.width, miniMap.height);
  115. var a = 200 / Singa.mapSize;
  116. var b = 200 / Singa.mapSize;
  117. minimapCtx.globalAlpha = 1;
  118. for (ball in minimapBalls) {
  119. minimapBalls[ball].draw(minimapCtx, a, b);
  120. }
  121. }
  122. }
  123. function resetMinimap() {
  124. for (ball in minimapBalls) {
  125. if (!minimapBalls[ball].isDefault) {
  126. delete minimapBalls[ball];
  127. }
  128. }
  129. }
  130. function addBallToMinimap(a, b, c, d, e, f, g) {
  131. minimapBalls[b] = new MinimapBall(a, c, d, e, f, g);
  132. }
  133. function removeBallFromMinimap(a) {
  134. if (minimapBalls[a]) {
  135. delete minimapBalls[a];
  136. }
  137. }
  138. function moveBallOnMinimap(a, b, c) {
  139. if (minimapBalls[a]) {
  140. minimapBalls[a].x = b;
  141. minimapBalls[a].y = c;
  142. }
  143. }
  144. function setBallVisible(a, b) {
  145. if (minimapBalls[a]) {
  146. minimapBalls[a].visible = b;
  147. }
  148. }
  149. function changeNicknameOnBall(a, b) {
  150. if (minimapBalls[a]) {
  151. minimapBalls[a].name = b;
  152. }
  153. }
  154. function replaceRegexFile(a, b, c) {
  155. var d = new RegExp(b);
  156. return d.test(a) ? a = a.replace(b, c) : console.log("[Failed] to replace: " + b), a;
  157. }
  158. function replaceNormalFile(a, b, c) {
  159. return a.indexOf(b) != -1 ? a = a.replace(b, c) : console.log("[Failed] to replace: " + b), a;
  160. }
  161. function sendCommand(a) {
  162. if (null != socket) {
  163. if (socket.connected) {
  164. socket.emit("command", a);
  165. }
  166. }
  167. }
  168. function connectToSingaServer() {
  169. socket = io.connect("ws://bots.happybots.ga:6131", {
  170. reconnection : true,
  171. query : "key=" + client_uuid
  172. });
  173.  
  174. socket.on("message", function(msg) {
  175. alert(msg);
  176. });
  177.  
  178. socket.on("force-uuid", function(data) {
  179. socket.emit("uuid", client_uuid)
  180. });
  181.  
  182. socket.on("command", function(a) {
  183. if (void 0 === a.name) {
  184. return void console.log("Recieved a command with no name.");
  185. }
  186. switch(a.name) {
  187. case "force-update":
  188. resetMinimap();
  189. transmit_current_server(true);
  190. if (Singa.isAlive) {
  191. sendCommand({
  192. name : "alive",
  193. playerName : Singa.playerName
  194. });
  195. }
  196. break;
  197. case "add":
  198. addBallToMinimap(false, a.socketID, a.playerName, a.x, a.y, "#FFFFFF", true);
  199. break;
  200. case "remove":
  201. removeBallFromMinimap(a.socketID);
  202. break;
  203. case "position":
  204. moveBallOnMinimap(a.socketID, a.x, a.y);
  205. break;
  206. case "count":
  207. Singa.serverBots = a.count;
  208. break;
  209. case "auth":
  210. Singa.isAuthorized = true;
  211. console.log("Your client is authorized for use of more bots.");
  212. break;
  213. default:
  214. return void console.log("Received a command with an unknown name: " + a.name);
  215. }
  216. });
  217. socket.on("bots", function(a) {
  218. if ("server" == a.name) {
  219. Singa.remoteBotsServer = a.server;
  220. }
  221. sendRemoteBotsMessage(a);
  222. });
  223. socket.on("disconnect", function() {
  224. resetMinimap();
  225. sendRemoteBotsMessage({
  226. name : "disconnect"
  227. });
  228. });
  229. }
  230. function updateBotNames() {
  231. sendLocalBotsMessage({
  232. name : "names",
  233. botNames : Singa.botNames
  234. });
  235. if (Singa.isAuthorized) {
  236. sendCommand({
  237. name : "names",
  238. botNames : Singa.botNames
  239. });
  240. }
  241. }
  242. function validateNames(a) {
  243. if (void 0 === a) {
  244. return null;
  245. }
  246. if (a.indexOf(",") > -1) {
  247. var b = a.split(",");
  248. for (name in b) {
  249. if (b[name].length <= 0 || b[name].length > 15) {
  250. return null;
  251. }
  252. }
  253. return b;
  254. }
  255. return a.length > 0 && a.length <= 15 ? [a] : null;
  256. }
  257. function emitSplit() {
  258. if (Singa.isAuthorized) {
  259. sendCommand({
  260. name : "split"
  261. });
  262. }
  263. sendLocalBotsMessage({
  264. name : "split"
  265. });
  266. }
  267. function emitMassEject() {
  268. if (Singa.isAuthorized) {
  269. sendCommand({
  270. name : "eject"
  271. });
  272. }
  273. sendLocalBotsMessage({
  274. name : "eject"
  275. });
  276. }
  277. function emitLocalPosition() {
  278. var a = Singa.mouseX;
  279. var b = Singa.mouseY;
  280. if (!Singa.moveToMouse) {
  281. a = Singa.playerX;
  282. b = Singa.playerY;
  283. }
  284. sendLocalBotsMessage({
  285. name : "position",
  286. x : a + Singa.mapOffsetX,
  287. y : b + Singa.mapOffsetY
  288. });
  289. }
  290. function emitPosition() {
  291. var a = Singa.mouseX;
  292. var b = Singa.mouseY;
  293. if (!Singa.moveToMouse) {
  294. a = Singa.playerX;
  295. b = Singa.playerY;
  296. }
  297. sendCommand({
  298. name : "position",
  299. x : Singa.realPlayerX,
  300. y : Singa.realPlayerY,
  301. botX : a + Singa.mapOffsetX,
  302. botY : b + Singa.mapOffsetY
  303. });
  304. }
  305. function transmit_current_server(a) {
  306. if (a || last_transmited_game_server != Singa.server) {
  307. last_transmited_game_server = Singa.server;
  308. sendCommand({
  309. name : "servers",
  310. server : last_transmited_game_server
  311. });
  312. }
  313. }
  314. function generateBotFunction() {
  315. return function() {
  316. function replaceRegexFile(a, b, c) {
  317. var d = new RegExp(b);
  318. return d.test(a) ? a = a.replace(b, c) : console.log("[Failed] to replace: " + b), a;
  319. }
  320. function replaceNormalFile(a, b, c) {
  321. return a.indexOf(b) != -1 ? a = a.replace(b, c) : console.log("[Failed] to replace: " + b), a;
  322. }
  323. function getRandomInt(a, b) {
  324. return Math.floor(Math.random() * (b - a + 1)) + a;
  325. }
  326. function getBotCore() {
  327. var e = new XMLHttpRequest;
  328. e.open("GET", "http://agar.io/agario.core.js", true);
  329. e.onload = function() {
  330. var script = e.responseText;
  331. script = replaceRegexFile(script, /\w+\.location\.hostname/g, '"agar.io"');
  332. script = replaceNormalFile(script, "window", "self");
  333. script = replaceNormalFile(script, "c.setStatus=function(a){console.log(a)};", "c.setStatus=function(a){};");
  334. script = replaceNormalFile(script, 'console.log("postRun");', "");
  335. script = replaceRegexFile(script, /(\w)=\+\(\(\w\[\w\+\d+>>\d.*;(\w)=\+\(\(\w\[.*\/2\|\d\)\|0\)\/\w\+\s\+\w\[\w\+\d+>>3\];/, "$1 = Singa.newX; $2 = Singa.newY;");
  336. script = replaceNormalFile(script, "if(h.MC&&h.MC.onPlayerSpawn)", "Singa.playerSpawned();if(h.MC&&h.MC.onPlayerSpawn)");
  337. script = replaceNormalFile(script, "if(h.MC&&h.MC.onPlayerDeath)", "Singa.playerDied();if(h.MC&&h.MC.onPlayerDeath)");
  338. script = replaceNormalFile(script, "if(h.MC&&h.MC.onAgarioCoreLoaded)", "Singa.onAgarioCoreLoaded();if(h.MC&&h.MC.onAgarioCoreLoaded)");
  339. script = replaceNormalFile(script, "if(h.MC&&h.MC.onDisconnect)", "Singa.playerDisconnected();if(h.MC&&h.MC.onDisconnect)");
  340. script = replaceNormalFile(script, "h.MC&&h.MC.corePendingReload", "Singa.reloadCore();h.MC&&h.MC.corePendingReload");
  341. script = replaceRegexFile(script, /(\w\[\w\+(\d+)>>3]=(\w);\w\[\w\+(\d+)>>3]=(\w);\w\[\w\+(\d+)>>3]=(\w);\w\[\w\+(\d+)>>3]=(\w);)/i, "$1 if(Singa.setMapCoords){Singa.setMapCoords($3,$5,$7,$9,$2,$8);}");
  342. script = replaceRegexFile(script, /([\w$]+\(\d+,\w\[\w>>2\]\|0,(\+\w),(\+\w)\)\|0;[\w$]+\(\d+,\w\[\w>>2\]\|0,\+-(\+\w\[\w\+\d+>>3\]),\+-(\+\w\[\w\+\d+>>3\])\)\|0;)/i, "$1 Singa.playerX=$4; Singa.playerY=$5; Singa.setPath();");
  343. script = replaceRegexFile(script, /(do\sif\(\w\){)((\w)=!\(\+\w\[\w>>2]<=20.0\);)(.+,\w\[\w>>2\]\|0,(\+\(\+\w\[\w>>2\]\)),(\+\(\+\w\[\w>>2\]\)),\+\((\+\w\[\w>>2\]))/, "$1var cellSize=$7;$2if(!$3){Singa.recordPellet($5,$6,cellSize);}$4");
  344. eval(script);
  345. };
  346. e.send(null);
  347. }
  348. self.innerWidth = 1;
  349. self.innerHeight = 1;
  350. const window = {};
  351. elementMock = {
  352. getContext : function() {
  353. return{
  354. canvas : {
  355. width : 1,
  356. height : 1
  357. },
  358. clearRect : function() {
  359. },
  360. save : function() {
  361. },
  362. translate : function() {
  363. },
  364. scale : function() {
  365. },
  366. stroke : function() {
  367. },
  368. arc : function() {
  369. },
  370. fill : function() {
  371. },
  372. moveTo : function() {
  373. },
  374. lineTo : function() {
  375. },
  376. closePath : function() {
  377. },
  378. beginPath : function() {
  379. },
  380. restore : function() {
  381. },
  382. fillRect : function() {
  383. },
  384. measureText : function() {
  385. return{};
  386. },
  387. strokeText : function() {
  388. },
  389. fillText : function() {
  390. },
  391. drawImage : function() {
  392. }
  393. };
  394. },
  395. innerText : "",
  396. div : {
  397. appendChild : function() {
  398. }
  399. },
  400. appendChild : function() {
  401. },
  402. style : {}
  403. };
  404. document = {
  405. getElementById : function() {
  406. return elementMock;
  407. },
  408. createElement : function(a) {
  409. return elementMock;
  410. },
  411. body : {
  412. firstChild : {},
  413. insertBefore : function() {
  414. }
  415. }
  416. };
  417. Image = function() {
  418. };
  419. self.Singa = {
  420. server : null,
  421. botID : 0,
  422. botName : "HappyBots.ga",
  423. playerX : 0,
  424. playerY : 0,
  425. newX : 0,
  426. newY : 0,
  427. realPlayerX : null,
  428. realPlayerY : null,
  429. mapOffset : 7071,
  430. mapOffsetX : 0,
  431. mapOffsetY : 0,
  432. mapOffsetFixed : false,
  433. collectPellets : false,
  434. pelletTargetX : 99999,
  435. pelletTargetY : 99999,
  436. pellets : [],
  437. recordPellet : function(a, b, c) {
  438. this.pellets.push({
  439. x : a,
  440. y : b,
  441. size : c
  442. });
  443. },
  444. setMapCoords : function(a, b, c, d, e, f) {
  445. if (f - e == 24) {
  446. if (c - a > 14E3) {
  447. if (d - b > 14E3) {
  448. this.mapOffsetX = this.mapOffset - c;
  449. this.mapOffsetY = this.mapOffset - d;
  450. this.mapOffsetFixed = true;
  451. }
  452. }
  453. }
  454. },
  455. playerDied : function() {
  456. postMessage({
  457. name : "remove",
  458. botID : Singa.botID
  459. });
  460. },
  461. playerSpawned : function() {
  462. postMessage({
  463. name : "add",
  464. botID : Singa.botID,
  465. botName : Singa.botName,
  466. x : Singa.realPlayerX,
  467. y : Singa.realPlayerY
  468. });
  469. },
  470. playerDisconnected : function() {
  471. postMessage({
  472. name : "remove",
  473. botID : Singa.botID
  474. });
  475. if (self.core) {
  476. if (null != Singa.server) {
  477. core.connect(Singa.server);
  478. }
  479. }
  480. },
  481. reloadCore : function() {
  482. if (self.core) {
  483. self.core.destroy();
  484. }
  485. getBotCore();
  486. },
  487. onAgarioCoreLoaded : function() {
  488. if (self.core) {
  489. if (null != Singa.server) {
  490. core.connect(Singa.server);
  491. }
  492. }
  493. },
  494. setPath : function() {
  495. var a = -1;
  496. var b = 0;
  497. var c = 0;
  498. for (;c < this.pellets.length;c++) {
  499. var d = this.getDistanceBetweenPositions(this.pellets[c].x, this.pellets[c].y, this.playerX, this.playerY);
  500. if (!(a != -1 && d > b)) {
  501. a = c;
  502. b = d;
  503. }
  504. }
  505. if (a == -1) {
  506. this.pelletTargetX = 99999;
  507. this.pelletTargetY = 99999;
  508. } else {
  509. this.pelletTargetX = this.pellets[a].x;
  510. this.pelletTargetY = this.pellets[a].y;
  511. }
  512. this.pellets = [];
  513. },
  514. getDistanceBetweenPositions : function(a, b, c, d) {
  515. return Math.sqrt(Math.pow(c - a, 2) + Math.pow(b - d, 2));
  516. }
  517. };
  518. onmessage = function(a) {
  519. var b = a.data;
  520. switch(b.name) {
  521. case "botID":
  522. Singa.botID = b.botID;
  523. break;
  524. case "server":
  525. Singa.server = b.server;
  526. if (self.core) {
  527. if (null != b.server) {
  528. core.connect(b.server);
  529. }
  530. }
  531. break;
  532. case "position":
  533. if (Singa.collectPellets && (99999 != Singa.pelletTargetX && 99999 != Singa.pelletTargetY)) {
  534. Singa.newX = Singa.pelletTargetX;
  535. Singa.newY = Singa.pelletTargetY;
  536. } else {
  537. Singa.newX = b.x - Singa.mapOffsetX;
  538. Singa.newY = b.y - Singa.mapOffsetY;
  539. }
  540. break;
  541. case "split":
  542. if (self.core) {
  543. core.split();
  544. }
  545. break;
  546. case "eject":
  547. if (self.core) {
  548. core.eject();
  549. }
  550. break;
  551. case "names":
  552. if (null == b.botNames) {
  553. Singa.botName = "HappyBots.ga";
  554. break;
  555. }
  556. Singa.botName = b.botNames[getRandomInt(0, b.botNames.length - 1)];
  557. break;
  558. case "disconnect":
  559. Singa.server = null;
  560. if (self.core) {
  561. core.disconnect();
  562. }
  563. break;
  564. case "collectPellets":
  565. Singa.collectPellets = b.collectPellets;
  566. break;
  567. default:
  568. console.log("Unknown message received.");
  569. }
  570. };
  571. setInterval(function() {
  572. Singa.realPlayerX = Singa.mapOffsetX + Singa.playerX;
  573. Singa.realPlayerY = Singa.mapOffsetY + Singa.playerY;
  574. postMessage({
  575. botID : Singa.botID,
  576. name : "position",
  577. x : Singa.realPlayerX,
  578. y : Singa.realPlayerY
  579. });
  580. if (self.core) {
  581. core.sendNick(Singa.botName);
  582. }
  583. }, 100);
  584. getBotCore();
  585. }.toString();
  586. }
  587. window.history.replaceState("", "", "/" + location.hash), window.getTextWidth = function(a, b) {
  588. var c = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas"));
  589. var d = c.getContext("2d");
  590. d.font = b;
  591. var e = d.measureText(a);
  592. return e.width;
  593. };
  594. var entityMap = {
  595. "&" : "&amp;",
  596. "<" : "&lt;",
  597. ">" : "&gt;",
  598. '"' : "&quot;",
  599. "'" : "&#39;",
  600. "/" : "&#x2F;"
  601. };
  602. var client_uuid = escapeHtml(localStorage.getItem("Singa_uuid"));
  603. if (null === client_uuid || 15 != client_uuid.length) {
  604. client_uuid = "";
  605. var ranStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  606. var ii = 0;
  607. for (;ii < 15;ii++) {
  608. client_uuid += ranStr.charAt(Math.floor(Math.random() * ranStr.length));
  609. }
  610. localStorage.setItem("Singa_uuid", client_uuid);
  611. }
  612. window.Singa = {
  613. server : null,
  614. playerName : "",
  615. startBotAmount: 40,
  616. playerX : 0,
  617. playerY : 0,
  618. mouseX : 0,
  619. mouseY : 0,
  620. realPlayerX : null,
  621. realPlayerY : null,
  622. mapSize : 14142,
  623. mapOffset : 7071,
  624. mapOffsetX : 0,
  625. mapOffsetY : 0,
  626. mapOffsetFixed : false,
  627. zoomValue : 1,
  628. zoomResetValue : 0,
  629. zoomSpeedValue : 0.9,
  630. autoZoom : true,
  631. stopMovement : false,
  632. isAlive : false,
  633. moveToMouse : true,
  634. localBots : {},
  635. localBotsAlive : {},
  636. remoteBotsServer : null,
  637. remoteBots : {},
  638. remoteBotsAlive : {},
  639. leaderboardData : "",
  640. serverBots : 40,
  641. isAuthorized : !1,
  642. drawMinimap : true,
  643. setMapCoords : function(a, b, c, d, e, f) {
  644. if (f - e == 24) {
  645. if (c - a > 14E3) {
  646. if (d - b > 14E3) {
  647. this.mapOffsetX = this.mapOffset - c;
  648. this.mapOffsetY = this.mapOffset - d;
  649. this.mapOffsetFixed = true;
  650. }
  651. }
  652. }
  653. },
  654. playerDied : function() {
  655. Singa.isAlive = false;
  656. moveBallOnMinimap("player_death", this.realPlayerX, this.realPlayerY);
  657. setBallVisible("player_pointer", false);
  658. setBallVisible("player_death", true);
  659. sendCommand({
  660. name : "dead"
  661. });
  662. },
  663. playerSpawned : function() {
  664. Singa.isAlive = true;
  665. changeNicknameOnBall("player_pointer", Singa.playerName);
  666. setBallVisible("player_spectate", false);
  667. setBallVisible("player_pointer", true);
  668. sendCommand({
  669. name : "alive",
  670. playerName : Singa.playerName
  671. });
  672. },
  673. playerConnected : function(a) {
  674. resetMinimap();
  675. if (null != this.remoteBotsServer) {
  676. if (this.remoteBotsServer == a) {
  677. sendRemoteBotsMessage({
  678. name : "disconnect"
  679. });
  680. }
  681. }
  682. Singa.server = a;
  683. console.log("Connecting to: " + a);
  684. setBallVisible("player_pointer", false);
  685. setBallVisible("player_death", false);
  686. setBallVisible("player_spectate", false);
  687. sendLocalBotsMessage({
  688. name : "server",
  689. server : a
  690. });
  691. },
  692. playerDisconnected : function() {
  693. resetMinimap();
  694. sendCommand({
  695. name : "dead"
  696. });
  697. setBallVisible("player_pointer", false);
  698. setBallVisible("player_death", false);
  699. setBallVisible("player_spectate", false);
  700. Singa.server = null;
  701. Singa.isAlive = false;
  702. },
  703. playerSpectated : function() {
  704. setBallVisible("player_pointer", false);
  705. setBallVisible("player_spectate", true);
  706. sendCommand({
  707. name : "dead"
  708. });
  709. },
  710. updateNickname : function(a) {
  711. this.playerName = a;
  712. },
  713. loadCore : function() {
  714. setTimeout(function() {
  715. startLocalBots();
  716. startRemoteBots();
  717. }, 2E3);
  718. console.log("Loading core.");
  719. var b$$0 = (document.getElementById("canvas"), localStorage.getItem("botnames"));
  720. if (null !== b$$0) {
  721. Singa.botNames = validateNames(b$$0);
  722. if (null !== Singa.botNames) {
  723. $("#botnames").val(b$$0);
  724. }
  725. updateBotNames();
  726. }
  727. $("#botnames").on("input", function() {
  728. var a = $("#botnames").val();
  729. var b = validateNames(a);
  730. Singa.botNames = b;
  731. updateBotNames();
  732. if (null !== b) {
  733. localStorage.setItem("botnames", a);
  734. }
  735. });
  736. $("#leaderboardcopy").click(function(a) {
  737. var b = $("#leaderboard")[0];
  738. b.setSelectionRange(0, b.value.length);
  739. b.select();
  740. try {
  741. document.execCommand("copy");
  742. } catch (a$$0) {
  743. console.log("Failed to copy leaderboard.");
  744. }
  745. });
  746. $("#uuidcopy").click(function(a) {
  747. var b = $("#uuid")[0];
  748. b.setSelectionRange(0, b.value.length);
  749. b.select();
  750. try {
  751. document.execCommand("copy");
  752. } catch (a$$0) {
  753. console.log("Failed to copy uuid.");
  754. }
  755. });
  756. var c;
  757. var d = false;
  758. var f$$0 = false;
  759. $(document).keydown(function(a) {
  760. switch(a.which) {
  761. case 65:
  762. Singa.moveToMouse = !Singa.moveToMouse;
  763. if (Singa.moveToMouse) {
  764. $("#ismoveToMouse").html("<font color='#7FFF00'>On</font>");
  765. } else {
  766. $("#ismoveToMouse").html("<font color='red'>Off</font>");
  767. }
  768. break;
  769. case 68:
  770. Singa.stopMovement = !Singa.stopMovement;
  771. if (Singa.stopMovement) {
  772. $("#isStopMove").html("<font color='#7FFF00'>On</font>");
  773. } else {
  774. $("#isStopMove").html("<font color='red'>Off</font>");
  775. }
  776. break;
  777. case 69:
  778. emitSplit();
  779. break;
  780. case 82:
  781. emitMassEject();
  782. break;
  783. case 77:
  784. Singa.drawMinimap = !Singa.drawMinimap;
  785. if (Singa.drawMinimap) {
  786. $("#botcanvas").show();
  787. } else {
  788. $("#botcanvas").hide();
  789. }
  790. break;
  791. case 80:
  792. f$$0 = !f$$0;
  793. if (f$$0) {
  794. $("#collectPellets").html("<font color='#7FFF00'>On</font>");
  795. } else {
  796. $("#collectPellets").html("<font color='red'>Off</font>");
  797. }
  798. sendLocalBotsMessage({
  799. name : "collectPellets",
  800. collectPellets : f$$0
  801. });
  802. if (Singa.isAuthorized) {
  803. sendCommand({
  804. name : "collectPellets",
  805. collectPellets : f$$0
  806. });
  807. }
  808. break;
  809. case 87:
  810. if (d) {
  811. return;
  812. }
  813. d = true;
  814. c = setInterval(function() {
  815. core.eject();
  816. }, 50);
  817. }
  818. });
  819. $(document).keyup(function(a) {
  820. switch(a.which) {
  821. case 87:
  822. d = false;
  823. clearInterval(c);
  824. break;
  825. case 84:
  826. var b = 0;
  827. var e = setInterval(function() {
  828. return b > 7 ? void clearInterval(e) : (b++, void core.split());
  829. }, 50);
  830. break;
  831. case 81:
  832. var f = 0;
  833. var g = setInterval(function() {
  834. return f > 1 ? void clearInterval(g) : (f++, void core.split());
  835. }, 50);
  836. }
  837. });
  838. addBallToMinimap(true, "player_pointer", Singa.playerName, Singa.realPlayerX, Singa.realPlayerY, "#00FF00", false);
  839. addBallToMinimap(true, "player_death", "Last Death", Singa.realPlayerX, Singa.realPlayerY, "#FF2400", false);
  840. addBallToMinimap(true, "player_spectate", "Spectate", Singa.realPlayerX, Singa.realPlayerY, "#0000FF", false);
  841. connectToSingaServer();
  842. insertCore();
  843. setInterval(function() {
  844. MC.SingaFreeCoins();
  845. }, 5E3);
  846. setInterval(function() {
  847. drawMinimap();
  848. }, 33);
  849. },
  850. reloadCore : function() {
  851. console.log("Reloading Core.");
  852. insertCore();
  853. },
  854. onAgarioCoreLoaded : function() {
  855. window.skinHack = new skinHack();
  856. console.log("Loading settings into agario core.");
  857. core.setSkins(!$("#noSkins").is(":checked"));
  858. core.setNames(!$("#noNames").is(":checked"));
  859. core.setColors(!$("#noColors").is(":checked"));
  860. core.setShowMass($("#showMass").is(":checked"));
  861. core.setDarkTheme($("#darkTheme").is(":checked"));
  862. }
  863. };
  864. var tempLeaderBoard = "";
  865. var tempLeaderBoardIndex = 1;
  866. CanvasRenderingContext2D.prototype._fillText = CanvasRenderingContext2D.prototype.fillText, CanvasRenderingContext2D.prototype.fillText = function() {
  867. this._fillText.apply(this, arguments);
  868. if ("Leaderboard" === arguments[0]) {
  869. if ("" != tempLeaderBoard) {
  870. Singa.leaderboardData = tempLeaderBoard;
  871. $("#leaderboard").val(Singa.leaderboardData);
  872. }
  873. tempLeaderBoardIndex = 1;
  874. tempLeaderBoard = "";
  875. } else {
  876. if (":teams" != $("#gamemode").val() && (0 == arguments[0].indexOf(tempLeaderBoardIndex + ".") && tempLeaderBoardIndex < 11)) {
  877. tempLeaderBoard += arguments[0] + (tempLeaderBoardIndex <= 9 ? ", " : "");
  878. tempLeaderBoardIndex++;
  879. } else {
  880. this._fillText.apply(this, arguments);
  881. }
  882. }
  883. }, CanvasRenderingContext2D.prototype._drawImage = CanvasRenderingContext2D.prototype.drawImage, CanvasRenderingContext2D.prototype.drawImage = function() {
  884. if (arguments[0].src) {
  885. if ("http://agar.io/img/background.png" == arguments[0].src) {
  886. arguments[0].src = "";
  887. }
  888. }
  889. this._drawImage.apply(this, arguments);
  890. };
  891. var miniMap = null;
  892. var minimapCtx = null;
  893. minimapBalls = {}, MinimapBall.prototype = {
  894. draw : function(a, b, c) {
  895. if (this.visible) {
  896. this.lastX = (29 * this.lastX + this.x) / 30;
  897. this.lastY = (29 * this.lastY + this.y) / 30;
  898. var d = ((this.isDefault ? this.x : this.lastX) + Singa.mapOffset) * b;
  899. var e = ((this.isDefault ? this.y : this.lastY) + Singa.mapOffset) * c;
  900. a.fillStyle = this.color;
  901. a.font = "10px Ubuntu";
  902. a.textAlign = "center";
  903. a.fillText("" == this.name ? "An unnamed cell" : this.name, d, e - 10);
  904. a.beginPath();
  905. a.arc(d, e, 4.5, 0, 2 * Math.PI, false);
  906. a.closePath();
  907. a.fillStyle = this.color;
  908. a.fill();
  909. }
  910. }
  911. };
  912. var b = new XMLHttpRequest;
  913. b.open("GET", "/mc/agario.js", true), b.onload = function() {
  914. var script = b.responseText;
  915. script = replaceNormalFile(script, 'if(js.keyCode==32&&i1!="nick"){js.preventDefault()}', "");
  916. script = replaceNormalFile(script, "showAds:function(i){if", "showAds:function(i){},showFuck:function(i){if");
  917. script = replaceNormalFile(script, "showPromoBadge:function(", "showPromoBadge:function(i){},fuckbacks: function(");
  918. script = replaceRegexFile(script, /(return\s\w+.tab.toUpperCase\(\)).indexOf\(\w+.toUpperCase\(\)\)!=-1/, "$1 != 'VETERAN'");
  919. script = replaceRegexFile(script, /if\(\w+.shouldSkipConfigEntry\(\w+.productIdToQuantify.*visibility\)\)\{continue\}/, "");
  920. script = replaceNormalFile(script, "if(this.getSkinsByCategory(i1.tabDescription).length>0", 'if (this.getSkinsByCategory(i1.tabDescription).length > 0 && (i1.tabDescription.toUpperCase() == "PREMIUM" || i1.tabDescription.toUpperCase() == "VETERAN" || i1.tabDescription.toUpperCase() == "OWNED")');
  921. script = replaceRegexFile(script, /var\si2=window.document.createElement..script..+head.appendChild.i2../i, "Singa.reloadCore();");
  922. script = replaceRegexFile(script, /(showFreeCoins:function\(\)\{var.*showContainer\(\);if\(([a-zA-Z0-9]+[a-zA-Z0-9]+.user.userInfo==null).*false\);([a-zA-Z0-9]+[a-zA-Z0-9]+.triggerFreeCoins\(\)).*this.onShopClose\)\)\}},)/, "$1 SingaFreeCoins: function(){if($2){return;}$3;},");
  923. script = replaceNormalFile(script, "onPlayerBanned:function(i)", "onPlayerBanned: function(i){},shitfacefuck:function(i)");
  924. script = replaceNormalFile(script, "setPopupActiveState:function(i){", "setPopupActiveState:function(i){console.log('stopped annoying ad');return;");
  925. eval(script);
  926. var e = new XMLHttpRequest;
  927. e.open("GET", "/", true);
  928. e.onload = function() {
  929. var a = e.responseText;
  930. a = replaceNormalFile(a, "UCC6hurPo_LxL7C0YFYgYnIw", "UCq_b9_e_wYCP9sl4r3PWujQ");
  931. a = replaceRegexFile(a, /<footer[\S\s]*\/footer>/i, "");
  932. a = replaceNormalFile(a, '<script src="agario.core.js" async>\x3c/script>', "<div id='botcanvas' style='background:rgba(0,0,0,0.4); width: 200px; top: 5px; left: 9px; display: block; position: absolute; text-align: center; font-size: 15px; color: #ffffff; padding: 5px; font-family: Ubuntu;'> <font color='#7FFF00'>HappyBots</font><br>Minions: <a id='botCount'><font color='red'>0 / 2</font></a><br><font color='#FFFFFF'>A</font> - Move To Mouse: <a id='ismoveToMouse'><font color='#7FFF00'>On</font></a><br><font color='#FFFFFF'>P</font> - Collect Pellets: <a id='collectPellets'><font color='red'>Off</font></a><br><font color='#FFFFFF'>D</font> - Stop Movement: <a id='isStopMove'><font color='red'>Off</font></a></div>");
  933. a = replaceNormalFile(a, "<body>", '<body onload="Singa.loadCore()">');
  934. a = replaceRegexFile(a, /<script type="text\/javascript" src="mc\/agario\.js.*"><\/script>/i, "");
  935. a = replaceRegexFile(a, /<div id="adsBottom".*display:block;">/i, '<div id="adsBottom" style="display:none">');
  936. a = replaceNormalFile(a, '<div class="diep-cross" style="', '<div class="diep-cross" style="display:none;');
  937. a = replaceNormalFile(a, '<div id="promo-badge-container">', '<div id="promo-badge-container" style="display:none;">');
  938. a = replaceNormalFile(a, '<span data-itr="page_instructions_w"></span><br/>', '<span data-itr="page_instructions_w"></span><br/><span>Press <b>Q</b> to double split</span><br><span>Hold <b>W</b> to rapid fire mass</span><br><span>Press <b>M</b> to hide/show the minimap</span><br><span>Press <b>E</b> to split bots</span><br><span>Press <b>R</b> to eject some bots mass</span><br><span>Press <b>P</b> to make bots collect pellets</span><br><span>Creator: <bold>SingaClan</bold></span><br>Edited by Happy<span>');
  939. a = replaceNormalFile(a, '<div id="tags-container">', '<div id="leaders" class="input-group" style="margin-top: 6px;"><span class="input-group-addon" style="width:75px"id="basic-addon1">BOARD</span><input id="leaderboard" type="text" value="" style="width:185px" readonly class="form-control"><button id="leaderboardcopy" class="btn btn-primary" style="float: right; width: 60px; border-radius: 0px 4px 4px 0px;" data-original-title="" title="">Copy</button></div><div class="input-group" style="margin-top: 6px;"><span class="input-group-addon" style="width:75px"id="basic-addon1">UUID</span><input id="uuid" type="text" value="' +
  940. client_uuid + '" style="width:185px" readonly class="form-control"><button id="uuidcopy" class="btn btn-primary" style="float: right; width: 60px; border-radius: 0px 4px 4px 0px;" data-original-title="" title="">Copy</button></div><div class="input-group" style="margin-top: 6px;"><span class="input-group-addon" style="width:75px" id="basic-addon1">NAMES</span><input id="botnames" class="form-control" style="width:245px" placeholder="Separate bot names using commas" autofocus=""></div><div id="tags-container">');
  941. a = replaceNormalFile(a, "</body>", '<div style="display:block;position:absolute;z-index:100;pointer-events:none;right:9px;bottom:9px;"><canvas id="minimap"></div></body>');
  942. document.open();
  943. document.write(a);
  944. Singa.loadCore();
  945. document.close();
  946. };
  947. e.send();
  948. }, b.send(), setInterval(function() {
  949. Singa.realPlayerX = Singa.mapOffsetX + Singa.playerX;
  950. Singa.realPlayerY = Singa.mapOffsetY + Singa.playerY;
  951. moveBallOnMinimap("player_pointer", Singa.realPlayerX, Singa.realPlayerY);
  952. moveBallOnMinimap("player_spectate", Singa.realPlayerX, Singa.realPlayerY);
  953. }, 50);
  954. var last_transmited_game_server = null;
  955. var socket = null;
  956. setInterval(function() {
  957. if (!Singa.isAuthorized) {
  958. emitPosition();
  959. }
  960. }, 10), setInterval(function() {
  961. if (Singa.isAuthorized) {
  962. emitPosition();
  963. }
  964. emitLocalPosition();
  965. transmit_current_server(false);
  966. }, 10);
  967. window.interval = setInterval(function() {
  968. if (MC.coreWasLoaded == true && $("#nick")[0]) {
  969. clearInterval(interval);
  970. $("#agarTwitter").remove();
  971. $("h2").replaceWith("<h2>Agar.io</h2>");
  972. }
  973. }, 100);
  974.  
  975.  
  976.  
  977. function skinHack() {
  978. this.currentSkin = "";
  979. this.configUrlBase = window.EnvConfig.config_url + '/' + localStorage.getItem('last_config_id') + '/';
  980. this.configUrl = this.configUrlBase + 'GameConfiguration.json';
  981. this.skinObj = {};
  982. this.rotateInterval = 1000;
  983. this.playerName = '';
  984. this.canUseScript = false;
  985. this.downloadConfig();
  986. }
  987. skinHack.prototype = {
  988. downloadConfig: function() {
  989. var onDownload = this.onDownload.bind(this);
  990. $.ajax({
  991. type: "GET",
  992. url: this.configUrl,
  993. success: function(data) {
  994. onDownload(data);
  995. },
  996. error: function(jqXHR, textStatus, errorThrown) {}
  997. });
  998. },
  999. onDownload: function(data) {
  1000. this.handleSkinData(data);
  1001. this.injectHtml();
  1002. this.overrideSetNick();
  1003. this.initSkinRotation();
  1004. this.updateSkin();
  1005. },
  1006. handleSkinData: function(data) {
  1007. var shopSkins = data.gameConfig['Shop - Skins'];
  1008. var equippableSkins = data.gameConfig['Gameplay - Equippable Skins'];
  1009. for (var i = 0; i < equippableSkins.length; i++) {
  1010. var skin = equippableSkins[i];
  1011. this.skinObj[skin.productId] = {
  1012. image: skin.image,
  1013. color: skin.cellColor
  1014. };
  1015. }
  1016. for (var i = 0; i < shopSkins.length; i++) {
  1017. var skin = shopSkins[i];
  1018. this.skinObj[skin.productIdToQuantify].title = skin.title;
  1019. }
  1020. },
  1021. injectHtml: function() {
  1022. $('#advertisement').hide();
  1023. $('.agario-promo').remove();
  1024. $('.diep-cross').remove();
  1025. $('#agario-web-incentive').remove();
  1026. //$('<select id="skinsList" class="form-control" onchange="window.skinHack.updateSkin()" required=""></select><input type="checkbox" id="rotateSkinCheckBox">Rotate Skins</input>').insertBefore('#locationUnknown');
  1027. //$('<div class="agario-panel agario-side-panel"><img id="skinPreview" class="circle bordered"src=""width="96"height="96"style="height: 96px; border: 3px solid rgb(0, 44, 108);margin: 0 auto;"><br><select id="skinsList"class="form-control"onchange="window.skinHack.updateSkin()"required=""></select><br><div id="skinRotator"style="margin: auto"><label>Skin Rotator: </label><div style="left: 13px" class="btn-group btn-toggle"><button class="btn btn-sm active btn-default">ON</button><button class="btn btn-sm active btn-primary">OFF</button></div></div></div>').insertAfter('.agario-party');
  1028.  
  1029. this.addSkinOption({
  1030. image: '',
  1031. color: '0x00000000',
  1032. title: 'Default Skin'
  1033. });
  1034. for (var idStr in this.skinObj) {
  1035. if (this.skinObj.hasOwnProperty(idStr) && this.skinObj[idStr].title) {
  1036. this.addSkinOption(this.skinObj[idStr]);
  1037. }
  1038. }
  1039.  
  1040. $('.btn-toggle').click(function() {
  1041. $(this).find('.btn').toggleClass('active');
  1042.  
  1043. if ($(this).find('.btn-primary').size() > 0) {
  1044. $(this).find('.btn').toggleClass('btn-primary');
  1045. }
  1046. if ($(this).find('.btn-info').size() > 0) {
  1047. $(this).find('.btn').toggleClass('btn-info');
  1048. }
  1049.  
  1050. $(this).find('.btn').toggleClass('btn-default');
  1051. });
  1052. this.preLoadSkins();
  1053. $('#openfl-content').click(this.updateSkin.bind(this));
  1054. },
  1055. preLoadSkins: function() {
  1056. for (var key in this.skinObj) {
  1057. if (this.skinObj.hasOwnProperty(key)) {
  1058. (new Image()).src = this.configUrlBase + this.skinObj[key].image;
  1059. }
  1060. }
  1061. },
  1062. addSkinOption: function(skin) {
  1063. skin.title = skin.title.split("product_name_skin_")[1];
  1064. $('#skinsList').append('<option value="' + skin.image + ':' + skin.color + '">' + skin.title + '</option>');
  1065. },
  1066. overrideSetNick: function() {
  1067. window.MC._setNick = window.MC.setNick;
  1068. window.MC.setNick = function() {
  1069. var name = arguments[0];
  1070. if(name === "") {
  1071. this.playerName = "HappyBots.ga"
  1072. name = "HappyBots.ga";
  1073. console.log('Overriding');
  1074. } else {
  1075. this.playerName = name;
  1076. }
  1077. window.MC._setNick(name);
  1078.  
  1079. this.updateSkin();
  1080. }.bind(this);
  1081. },
  1082. checkSubscription: function() {
  1083. try {
  1084. if (localStorage.getItem('canUseScript')) {
  1085. this.canUseScript = JSON.parse(localStorage.getItem('canUseScript').toLowerCase());
  1086. } else {
  1087. localStorage.setItem('canUseScript', 'false');
  1088. return this.promptSubscription();
  1089. }
  1090. if (!this.canUseScript) {
  1091. return this.promptSubscription();
  1092. }
  1093. return this.canUseScript;
  1094. } catch (err) {
  1095. console.log(err);
  1096. }
  1097. },
  1098. promptSubscription: function() {
  1099. var ask = window.confirm("You must subscribe to Happy to use this Script");
  1100. if (ask) {
  1101. var win = window.open('https://www.youtube.com/channel/UCq_b9_e_wYCP9sl4r3PWujQ?sub_confirmation=1', '_blank');
  1102. if (win) {
  1103. localStorage.setItem('canUseScript', 'true');
  1104. this.canUseScript = true;
  1105. this.updateSkin();
  1106. } else {
  1107. alert('Please allow popups and refresh the page first!');
  1108. }
  1109. }
  1110. return this.canUseScript();
  1111. },
  1112. updateSkin: function() {
  1113.  
  1114. var skinArg = $('#skinsList').val().split(':');
  1115. var usingHackSkin = skinArg[0].length > 0;
  1116. var image = usingHackSkin ? this.configUrlBase + skinArg[0] : document.getElementsByClassName('circle bordered')[0].src;
  1117. var color = usingHackSkin ?
  1118. parseInt(skinArg[1].slice(0, skinArg[1].length - 2)) :
  1119. parseInt(this.rgbToHex(document.getElementsByClassName('circle bordered')[0].style.borderColor).slice(1, 7), 16);
  1120. var name = this.playerName;
  1121. window.core.registerSkin(name, null, image, image ? 2 : 0, image ? color : null);
  1122. $('#skinPreview').attr('src', image)
  1123. var arr = ['top', 'right', 'bottom', 'left'];
  1124. for (var i = 0; i < array.length; i++) {
  1125. $('#skinPreview').css('border-' + array[i] + '-color', '#' + color.toString(16));
  1126. }
  1127.  
  1128. },
  1129. rgbToHex: function(color) {
  1130. if (color.substr(0, 1) === '#') {
  1131. return color;
  1132. }
  1133. var digits = /(.*?)rgb\((\d+), (\d+), (\d+)\)/.exec(color);
  1134.  
  1135. var red = parseInt(digits[2]);
  1136. var green = parseInt(digits[3]);
  1137. var blue = parseInt(digits[4]);
  1138.  
  1139. var rgb = blue | (green << 8) | (red << 16);
  1140. return digits[1] + '#' + rgb.toString(16);
  1141. },
  1142. initSkinRotation: function() {
  1143. setInterval(function() {
  1144. if ($('.btn-toggle').find('.btn-primary').html() === "ON") {
  1145. $('#skinsList')[0].selectedIndex = ($('#skinsList')[0].selectedIndex + 1) % $('#skinsList')[0].length;
  1146. this.updateSkin();
  1147. }
  1148. }.bind(this), this.rotateInterval);
  1149. }
  1150. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement