Bloble.io Base Build

Base build

  1. // ==UserScript==
  2. // @name Bloble.io Base Build
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.0
  5. // @description Base build
  6. // @author ITALIA
  7. // @match http://bloble.io/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. window.UIList = window.UIList || [];
  12. window.initFuncs = window.initFuncs || [];
  13. window.statusItems = window.statusItems || [];
  14.  
  15.  
  16. window.UIList.push({
  17. level: 0,
  18. x: 0,
  19. html: '<div onclick=buildGenerators()>Build Generators</div>'
  20. }, {
  21. level: 0,
  22. x: 1,
  23. html: '<div onclick=walls()>Build Walls</div>'
  24. }, {
  25. level: 0,
  26. x: 2,
  27. html: '<div onclick=buildHouses()>Build Offense</div>'
  28. }, {
  29. level: 0,
  30. x: 4,
  31. html: '<div onclick=buildHybrid()>Build Hybrid</div>'
  32. }, {
  33. level: 1,
  34. x: 0,
  35. html: '<div onclick=boulders()>Upgrade Boulders</div>'
  36. }, {
  37. level: 1,
  38. x: 1,
  39. html: '<div onclick=spikes()>Upgrade Spikes</div>'
  40. }, {
  41. level: 1,
  42. x: 2,
  43. html: '<div onclick=microGenerators()>Mico-Generators</div>'
  44. }, {
  45. level: 1,
  46. x: 3,
  47. html: '<div onclick=powerPlants()>Upgrade Power Plants</div>'
  48. }, {
  49. level: 2,
  50. x: 0,
  51. html: '<div onclick=sellGenerators()>Sell Generators</div>'
  52. }, {
  53. level: 2,
  54. x: 1,
  55. html: '<div onclick=sellall()>Sell all</div>'
  56. });
  57.  
  58. function emit2() {
  59. socket.emit.apply(socket, arguments);
  60. }
  61. window.walls = function () {
  62. for (i = -3.14; i < 3.14; i += .108) emit2("1", i, 1e3, 1)
  63. }
  64. window.sellGenerators = window.sellGenerators || function () {
  65. for (var a = [], d = 0; d < units.length; ++d) {
  66. if (units[d].type === 0 && units[d].owner == player.sid) {
  67. var name = getUnitFromPath(units[d].uPath).name;
  68. (name === 'Generator' || name === 'Power Plant') && a.push(units[d].id)
  69. }
  70. }
  71. socket.emit("3", a)
  72. }
  73. window.sellhouses = function () {
  74. for (var a = [], d = 0; d < units.length; ++d) units[d].type === 0 && units[d].owner == player.sid && getUnitFromPath(units[d].uPath).name === 'House' && a.push(units[d].id);
  75. socket.emit("3", a)
  76. }
  77. window.sellwalls = function () {
  78. for (var a = [], d = 0; d < units.length; ++d) units[d].type === 3 && units[d].owner == player.sid && getUnitFromPath(units[d].uPath).name === 'Wall' && a.push(units[d].id);
  79. socket.emit("3", a)
  80. }
  81. window.sellinner = function () {
  82. for (var a = [], d = 0; d < units.length; ++d) {
  83. if (units[d].type === 0 && units[d].owner == player.sid) {
  84. a.push(units[d].id)
  85. }
  86. }
  87. socket.emit("3", a)
  88. }
  89. window.sellall = function () {
  90. for (var a = [], d = 0; d < units.length; ++d)(units[d].type === 3 || units[d].type === 2 || units[d].type === 0) && units[d].owner == player.sid && a.push(units[d].id);
  91. socket.emit("3", a)
  92. }
  93. window.boulders = window.boulders || function () {
  94. for (var i = 0; i < units.length; ++i) 3 == units[i].type && "circle" == units[i].shape && units[i].owner == player.sid && socket.emit("4", units[i].id, 0)
  95. }
  96. window.microGenerators = window.microGenerators || function () {
  97. for (var i = 0; i < units.length; ++i) 3 == units[i].type && "circle" == units[i].shape && units[i].owner == player.sid && socket.emit("4", units[i].id, 1)
  98. }
  99. window.spikes = window.spikes || function () {
  100. for (var i = 0; i < units.length; ++i) 3 == units[i].type && "hexagon" == units[i].shape && units[i].owner == player.sid && socket.emit("4", units[i].id, 0)
  101. }
  102. window.powerPlants = window.powerPlants || function () {
  103. for (var i = 0; i < units.length; ++i) 0 == units[i].type && "hexagon" == units[i].shape && units[i].owner == player.sid && socket.emit("4", units[i].id, 0)
  104. }
  105. window.rapid = window.rapid || function () {
  106. for (var i = 0; i < units.length; ++i) 0 == units[i].type && 1 == units[i].turretIndex && "circle" == units[i].shape && units[i].owner == player.sid && socket.emit("4", units[i].id, 0)
  107. }
  108. window.ranged = window.ranged || function () {
  109. for (var i = 0; i < units.length; ++i) 0 == units[i].type && 1 == units[i].turretIndex && "circle" == units[i].shape && units[i].owner == player.sid && socket.emit("4", units[i].id, 1)
  110. }
  111. window.antiTank = window.antiTank || function () {
  112. for (var i = 0; i < units.length; ++i) 0 == units[i].type && 4 == units[i].turretIndex && "circle" == units[i].shape && units[i].owner == player.sid && socket.emit("4", units[i].id, 1)
  113. }
  114. window.semiAuto = window.semiAuto || function () {
  115. for (var i = 0; i < units.length; ++i) 0 == units[i].type && 4 == units[i].turretIndex && "circle" == units[i].shape && units[i].owner == player.sid && socket.emit("4", units[i].id, 0)
  116. }
  117. window.gatlins = window.gatlins || function () {
  118. for (var i = 0; i < units.length; ++i) 0 == units[i].type && 2 == units[i].turretIndex && "circle" == units[i].shape && units[i].owner == player.sid && socket.emit("4", units[i].id, 0)
  119. }
  120. window.spotter = window.spotter || function () {
  121. for (var i = 0; i < units.length; ++i) 0 == units[i].type && 3 == units[i].turretIndex && "circle" == units[i].shape && units[i].owner == player.sid && socket.emit("4", units[i].id, 0)
  122. };
  123. window.build = function (instr) {
  124. instr.forEach((ins) => {
  125. emit2.apply({}, ins);
  126. })
  127. }
  128. window.buildHybrid = function () {
  129. window.build([["1", 3.13, 243.85, 5], ["1", 2.87, 246.85, 2], ["1", 2.62, 243.85, 5], ["1", 2.37, 246.85, 2], ["1", 2.11, 243.85, 5], ["1", 1.86, 246.85, 2], ["1", 1.6, 243.85, 5], ["1", 1.34, 246.85, 2], ["1", 1.08, 243.85, 5], ["1", 0.82, 246.85, 2], ["1", 0.56, 243.85, 5], ["1", 0.3, 246.85, 2], ["1", 0.04, 243.85, 5], ["1", -0.21, 246.85, 2], ["1", -0.46, 243.85, 5], ["1", -0.72, 246.85, 2], ["1", -0.98, 243.85, 5], ["1", -1.23, 246.85, 2], ["1", -1.49, 243.85, 5], ["1", -1.74, 246.85, 2], ["1", -1.99, 243.85, 5], ["1", -2.25, 246.85, 2], ["1", -2.51, 243.85, 5], ["1", -2.77, 246.85, 2], ["1", 2.77, 190.49, 2], ["1", 2.43, 187.99, 2], ["1", 1.96, 188.53, 2], ["1", 2.76, 130, 4], ["1", 2.28, 130, 4], ["1", 1.79, 130, 4], ["1", 1.28, 130, 4], ["1", 0.79, 130, 4], ["1", 0.28, 130, 4], ["1", -0.19, 130, 4], ["1", -0.67, 130, 4], ["1", -1.17, 130, 4], ["1", -1.64, 130, 4], ["1", -2.13, 130, 4], ["1", -2.61, 130, 4], ["1", -3.06, 138.27, 4], ["1", -2.94, 195.69, 2], ["1", -2.4, 183.33, 2], ["1", -1.91, 180.8, 2], ["1", -1.41, 182.01, 2], ["1", -0.94, 182.52, 2], ["1", -0.45, 180.37, 2], ["1", 0.04, 178.74, 2], ["1", 0.53, 177.22, 2], ["1", 1.03, 181.72, 2], ["1", 1.49, 184.1, 2]]);
  130. }
  131. window.buildHouses = function () {
  132. window.build([["1", -0.09, 245.4, 1], ["1", 0.16, 243.15, 1], ["1", 0.41, 243.84, 1], ["1", 0.67, 244.57, 1], ["1", 0.04, 183.15, 5], ["1", 0.39, 184.96, 2], ["1", 0.72, 184.99, 4], ["1", 0.92, 245.85, 4], ["1", -0.34, 245.85, 4], ["1", -0.34, 140, 7], ["1", -0.6, 245.85, 4], ["1", 0.25, 130, 4], ["1", -0.88, 130, 4], ["1", -1.37, 130, 4], ["1", -1.86, 130, 4], ["1", -2.36, 130, 4], ["1", -2.88, 130, 4], ["1", 2.85, 130, 4], ["1", 2.36, 130, 4], ["1", 1.85, 130, 4], ["1", 1.38, 130, 4], ["1", 0.9, 130, 4], ["1", 1.19, 245.85, 4], ["1", 1.46, 245.85, 4], ["1", 1.73, 245.85, 4], ["1", 2, 245.85, 4], ["1", 2.26, 245.85, 4], ["1", 2.52, 245.85, 4], ["1", 2.78, 245.85, 4], ["1", 3.04, 245.85, 4], ["1", -2.99, 245.85, 4], ["1", -2.74, 245.85, 4], ["1", -2.49, 245.85, 4], ["1", -2.24, 245.85, 4], ["1", -1.99, 245.85, 4], ["1", -1.74, 245.85, 4], ["1", -1.48, 245.85, 4], ["1", -1.23, 245.85, 4], ["1", -0.94, 245.85, 4], ["1", -0.72, 187.11, 4], ["1", -1.06, 186.05, 4], ["1", -1.53, 186.15, 4], ["1", -1.87, 191.23, 4], ["1", -2.21, 185.53, 4], ["1", -2.55, 184.19, 4], ["1", 1.07, 186.28, 4], ["1", 1.61, 184.13, 4], ["1", 2.07, 185.66, 4], ["1", 2.39, 192.03, 4], ["1", 2.71, 186.8, 4], ["1", 3.06, 185.93, 4]])
  133. // window.build([["1", 0.24, 245.85, 4], ["1", 0.49, 245.85, 4], ["1", 0.74, 245.85, 4], ["1", -0.01, 245.85, 4], ["1", -0.26, 245.85, 4], ["1", -0.51, 245.85, 4], ["1", 1, 245.85, 4], ["1", 1.25, 245.85, 4], ["1", 1.5, 245.85, 4], ["1", 1.75, 245.85, 4], ["1", 2, 245.85, 4], ["1", 2.25, 245.85, 4], ["1", 2.5, 245.85, 4], ["1", 2.75, 245.85, 4], ["1", 3.01, 245.85, 4], ["1", -3.03, 245.85, 4], ["1", -3.01, 245.85, 4], ["1", -2.75, 245.85, 4], ["1", -2.49, 245.85, 4], ["1", -2.24, 245.85, 4], ["1", -1.98, 245.85, 4], ["1", -1.72, 245.85, 4], ["1", -1.46, 245.85, 4], ["1", -1.21, 245.85, 4], ["1", -0.96, 245.85, 4], ["1", -0.72, 203.14, 4], ["1", -0.39, 190.85, 4], ["1", -0.59, 130, 4], ["1", -0.05, 185.69, 4], ["1", 0.11, 130, 4], ["1", 0.31, 185.08, 5], ["1", 0.66, 187.02, 4], ["1", 1.02, 184.03, 4], ["1", 0.84, 130, 4], ["1", 1.36, 189.19, 4], ["1", 1.7, 186.55, 4], ["1", 1.44, 130, 4], ["1", 2.05, 186.48, 4], ["1", 1.92, 130, 4], ["1", 1.91, 130, 4], ["1", 2.38, 191.67, 4], ["1", 2.38, 130, 4], ["1", 2.71, 185.92, 4], ["1", 3.05, 185.84, 4], ["1", 2.87, 130, 4], ["1", -2.9, 188.9, 4], ["1", -2.57, 187.48, 4], ["1", -2.74, 130, 4], ["1", -2.24, 185.43, 4], ["1", -1.91, 186.44, 4], ["1", -2.07, 130, 4], ["1", -1.57, 190.81, 4], ["1", -1.58, 186.32, 4], ["1", -1.42, 130, 4], ["1", -1.24, 186.06, 4]]);
  134. }
  135. window.buildGenerators = function () {
  136. var arr = [["1", 3.11, 243.85, 3], ["1", -2.9, 243.85, 3], ["1", -2.63, 243.85, 3], ["1", -2.36, 243.85, 3], ["1", -2.06, 243.85, 3], ["1", -1.77, 243.85, 3], ["1", -1.5, 243.85, 3], ["1", -1.22, 243.85, 3], ["1", -0.94, 243.85, 3], ["1", -0.64, 243.85, 3], ["1", -0.36, 243.85, 3], ["1", -0.07, 243.85, 3], ["1", 0.2, 243.85, 3], ["1", 0.47, 243.85, 3], ["1", 0.76, 243.85, 3], ["1", 1.05, 243.85, 3], ["1", 1.35, 243.85, 3], ["1", 1.64, 243.85, 3], ["1", 1.92, 243.85, 3], ["1", 2.22, 243.85, 3], ["1", 2.49, 243.85, 3], ["1", 2.78, 243.85, 3], ["1", 3, 183.39, 3], ["1", -2.91, 178.82, 3], ["1", -2.5, 182.85, 3], ["1", -2.11, 178.92, 3], ["1", -1.72, 176.82, 3], ["1", -1.35, 177.59, 3], ["1", -0.98, 174.52, 3], ["1", -0.57, 179.76, 3], ["1", -0.19, 183.42, 3], ["1", 0.21, 176.37, 3], ["1", 0.63, 179.87, 3], ["1", 1.03, 175.57, 3], ["1", 1.43, 176.6, 3], ["1", 1.8, 181.19, 3], ["1", 2.19, 177.95, 3], ["1", 2.6, 178.66, 3]]
  137. window.build(arr);
  138. }
  139. window.makeUI = function () {
  140. if (window.hasMadeUI) return;
  141. window.hasMadeUI = true;
  142. window.statusItems.sort(function (a, b) {
  143. return a.order - b.order;
  144. })
  145. var levels = [];
  146. window.UIList.forEach((item) => {
  147. if (!levels[item.level]) levels[item.level] = [];
  148. levels[item.level].push(item)
  149. })
  150.  
  151. levels = levels.filter((a) => {
  152. if (a) {
  153. a.sort(function (a, b) {
  154. return a.x - b.x;
  155. })
  156. return true;
  157. } else {
  158. return false;
  159. }
  160. })
  161.  
  162. var headAppend = document.getElementsByTagName("head")[0],
  163. style = document.createElement("div");
  164.  
  165. var toast = document.createElement('div');
  166. toast.id = "snackbar";
  167. var css = document.createElement('div');
  168.  
  169. css.innerHTML = '<style>\n\
  170. #snackbar {\n\
  171. visibility: hidden;\n\
  172. min-width: 250px;\n\
  173. margin-left: -125px;\n\
  174. background-color: rgba(40, 40, 40, 0.5);\n\
  175. color: #fff;\n\
  176. text-align: center;\n\
  177. border-radius: 4px;\n\
  178. padding: 10px;\n\
  179. font-family: "regularF";\n\
  180. font-size: 20px;\n\
  181. position: fixed;\n\
  182. z-index: 100;\n\
  183. left: 50%;\n\
  184. top: 30px;\n\
  185. }\n\
  186. #snackbar.show {\n\
  187. visibility: visible;\n\
  188. -webkit-animation: fadein 0.5s;\n\
  189. animation: fadein 0.5s;\n\
  190. }\n\
  191. #snackbar.hide {\n\
  192. visibility: visible;\n\
  193. -webkit-animation: fadeout 0.5s;\n\
  194. animation: fadeout 0.5s;\n\
  195. }\n\
  196. @-webkit-keyframes fadein {\n\
  197. from {top: 0; opacity: 0;}\n\
  198. to {top: 30px; opacity: 1;}\n\
  199. }\n\
  200. @keyframes fadein {\n\
  201. from {top: 0; opacity: 0;}\n\
  202. to {top: 30px; opacity: 1;}\n\
  203. }\n\
  204. @-webkit-keyframes fadeout {\n\
  205. from {top: 30px; opacity: 1;}\n\
  206. to {top: 0; opacity: 0;}\n\
  207. }\n\
  208. @keyframes fadeout {\n\
  209. from {top: 30px; opacity: 1;}\n\
  210. to {top: 0; opacity: 0;}\n\
  211. }\n\
  212. </style>'
  213. var height = levels.length * (14 + 19) + (levels.length - 1) * 7 + 15;
  214. style.innerHTML = "<style>\n\
  215. #noobscriptUI, #noobscriptUI > div > div {\n\
  216. background-color:rgba(40,40,40,.5);\n\
  217. margin-left: 3px;\n\
  218. border-radius:4px;\n\
  219. pointer-events:all\n\
  220. }\n\
  221. #noobscriptUI {\n\
  222. top: -" + (height + 12) + "px;\n\
  223. transition: 1s;\n\
  224. margin-left:10px;\n\
  225. position:absolute;\n\
  226. padding-left:24px;\n\
  227. margin-top:9px;\n\
  228. padding-top:15px;\n\
  229. width:580px;\n\
  230. height: " + height + "px;\n\
  231. font-family:arial;\n\
  232. left:25%\n\
  233. }\n\
  234. #noobscriptUI:hover{\n\
  235. top:0px\n\
  236. }\n\
  237. #noobscriptUI > div > div {\n\
  238. color:#fff;\n\
  239. padding:7px;\n\
  240. height:19px;\n\
  241. display:inline-block;\n\
  242. cursor:pointer;\n\
  243. font-size:15px\n\
  244. }\n\
  245. </style>"
  246.  
  247. headAppend.appendChild(style);
  248. headAppend.appendChild(css);
  249.  
  250.  
  251. var contAppend = document.getElementById("gameUiContainer"),
  252. menuA = document.createElement("div");
  253.  
  254. var code = ['<div id="noobscriptUI">\n'];
  255.  
  256. levels.forEach((items, i) => {
  257. code.push(i === 0 ? ' <div>\n' : ' <div style="margin-top:7px;">\n');
  258. items.forEach((el) => {
  259. code.push(' ' + el.html + '\n');
  260. })
  261. code.push(' </div>\n');
  262. })
  263. code.push(' <div id="confinfo" style="margin-top:4px; color: white; text-align: center; font-size: 10px; white-space:pre"></div>')
  264. code.push('</div>');
  265.  
  266. menuA.innerHTML = code.join("");
  267. contAppend.insertBefore(menuA, contAppend.firstChild)
  268. contAppend.appendChild(toast)
  269. var toastTimeout = false;
  270. window.showToast = function (msg) {
  271. toast.textContent = msg;
  272.  
  273. if (toastTimeout) clearTimeout(toastTimeout);
  274. else toast.className = "show";
  275. toastTimeout = setTimeout(function () {
  276. toast.className = 'hide'
  277. setTimeout(function () {
  278. toast.className = '';
  279. }, 400);
  280. toastTimeout = false;
  281. }, 3000);
  282. }
  283. window.statusBar = function () {
  284. var el = document.getElementById('confinfo');
  285. var text = [];
  286.  
  287. window.statusItems.forEach((item, i) => {
  288. if (i !== 0) text.push(' ');
  289. if (item.name) text.push(item.name + ': ');
  290. text.push(item.value());
  291. })
  292.  
  293. el.textContent = text.join('');
  294. }
  295. window.statusBar();
  296.  
  297. window.initFuncs.forEach((func) => {
  298. func();
  299. })
  300. }
  301. setTimeout(() => {
  302. window.makeUI();
  303. }, 1000)