Slither.io auto play bot

auto play bot for slither.io

目前为 2023-06-02 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Slither.io auto play bot
  3. // @include http://slither.io/
  4. // @author I HAVE A REALLY LONG NICK NAME
  5. // @description auto play bot for slither.io
  6. // @license MIT
  7. // @namespace http://tampermonkey.net/
  8. // @version 0.1
  9. // @match *://stomped.io/*
  10. // ==/UserScript==
  11. var el = document.getElementsByTagName('iframe');
  12. for (var i = 0; i < el.length; i++) {
  13. var currentEl = el[i];
  14. currentEl.remove();
  15. }
  16. document.getElementById('logo').remove();
  17. document.getElementById('tips').remove();
  18. document.getElementById('fb').remove();
  19. document.getElementById('twth').remove();
  20. if (window.top != window.self)
  21. REALSCORE = 10;
  22. REALDNA = [1,1,1,1,1,1,1,1,1,1,1,1];
  23. BESTRANK = 1000;
  24. BESTSCORE = 1;
  25. printbot = function() {
  26. console.log("Dumping bot data:\nREALDNA = " + JSON.stringify(REALDNA) + ";\nREALSCORE = " + REALSCORE + ";\nBESTRANK = " + BESTRANK + ";\nBESTSCORE = " + BESTSCORE + ";");
  27. }
  28. savedna = function() {
  29. if(typeof(Storage) !== "undefined") {
  30. localStorage["REALSCORE"] = REALSCORE;
  31. localStorage["REALDNA"] = JSON.stringify(REALDNA);
  32. localStorage["BESTRANK"] = BESTRANK;
  33. localStorage["BESTSCORE"] = BESTSCORE;
  34. }
  35. }
  36. cleardna = function() {
  37. localStorage.removeItem("REALSCORE");
  38. localStorage.removeItem("REALDNA");
  39. localStorage.removeItem("BESTRANK");
  40. localStorage.removeItem("BESTSCORE");
  41. REALSCORE = 30;
  42. BESTRANK = 1000;
  43. var distavoid = 90;
  44. var preykerroin = 5;
  45. var viholliskerroin = 544;
  46. var vaarakerroin = 200;
  47. var chargedistance = 500;
  48. var pakoondistance = 70;
  49. var keskikerroin = 2.0;
  50. var keskihakukerroin = 0.1;
  51. REALDNA = [distavoid,preykerroin,viholliskerroin,vaarakerroin,chargedistance,pakoondistance,keskikerroin,keskihakukerroin];
  52. TESTDNA = REALDNA.slice();
  53. TESTSCORE = REALSCORE;
  54. testingdna = 1;
  55. DNA = REALDNA.slice();
  56. savedna();
  57. }
  58. if(typeof(Storage) !== "undefined") {
  59. // Code for localStorage/sessionStorage.
  60. if (!localStorage.REALSCORE || !localStorage.REALDNA || !localStorage.BESTRANK || !localStorage.BESTSCORE) {
  61. cleardna();
  62. }
  63. else
  64. {
  65. REALSCORE = localStorage["REALSCORE"]*1;
  66. REALDNA = JSON.parse(localStorage["REALDNA"]);
  67. BESTRANK = localStorage["BESTRANK"]*1;
  68. BESTSCORE = localStorage["BESTSCORE"]*1;
  69. }
  70. } else {
  71. // Sorry! No Web Storage support..
  72. }
  73. TESTDNA = REALDNA.slice();
  74. TESTSCORE = REALSCORE;
  75. testingdna = 1;
  76. DNA = REALDNA.slice();
  77. var injected_dead = true;
  78. var lastscore = 0;
  79. var bestscore = 0;
  80. var lastrank = 0;
  81. var bestrank = 1000;
  82. var uhka = false;
  83. var ruokakerroin = 1/40;
  84. var ruokapower = 1;
  85. var vihollispower = 2;
  86. var vaarapower = 2;
  87. var preypower = 1;
  88. var keskipower = 1;
  89. var preychase = true;
  90. var learnrate = 0.3;
  91. var precision = 100;
  92. INJECTED = function() {
  93. var kerroin = 10000;
  94. if (animating) {
  95. if (snake) {
  96. accelerate = false;
  97. injected_dead = false;
  98. //xm = grd-snake.xx;
  99. //ym = grd-snake.yy;
  100. xt = 0;
  101. yt = 0;
  102. mindist = grd;
  103. for (var i = 0; i < preys.length; i++) {
  104. xtd = (preys[i].xx-snake.xx);
  105. ytd = (preys[i].yy-snake.yy);
  106. dist = Math.sqrt(xtd*xtd + ytd*ytd);
  107. xt += xtd/Math.pow(dist,preypower+1)*DNA[1];
  108. yt += ytd/Math.pow(dist,preypower+1)*DNA[1];
  109. if (dist < DNA[4] && preychase)
  110. {
  111. accelerate = true;
  112. }
  113. }
  114. uhka = false;
  115. for (var i = 0; i < snakes.length; i++) {
  116. //alert(myStringArray[i]);
  117. target = snakes[i];
  118. if (snake.id!=target.id)
  119. {
  120. xtd = (target.xx-snake.xx);
  121. ytd = (target.yy-snake.yy);
  122. dist = Math.sqrt(xtd*xtd + ytd*ytd)-DNA[0];
  123. dist = Math.max(1, dist);
  124. xt += -xtd/Math.pow(dist,vihollispower+1)*DNA[2];
  125. yt += -ytd/Math.pow(dist,vihollispower+1)*DNA[2];
  126. if (dist < DNA[5])
  127. {
  128. accelerate = true;
  129. }
  130. if (dist<mindist)
  131. {
  132. uhka = target;
  133. mindist = dist;
  134. /*if (mindist<300)
  135. {
  136. accelerate = true;
  137. }*/
  138. }
  139. parts = target.pts;
  140. for (var k = 0; k < parts.length; k++)
  141. {
  142. part = parts[k];
  143. xtd = (part.xx-snake.xx);
  144. ytd = (part.yy-snake.yy);
  145. dist = Math.sqrt(xtd*xtd + ytd*ytd)-DNA[0];
  146. dist = Math.max(1, dist);
  147. xt += -xtd/Math.pow(dist,vaarapower+1)*DNA[3];
  148. yt += -ytd/Math.pow(dist,vaarapower+1)*DNA[3];
  149. }
  150. }
  151. }
  152. if (!(preychase && preys.length>0))
  153. {
  154. for (var i = 0; i < foods_c; i++) {
  155. //alert(myStringArray[i]);
  156. xtd = (foods[i].xx-snake.xx);
  157. ytd = (foods[i].yy-snake.yy);
  158. dist = Math.sqrt(xtd*xtd + ytd*ytd);
  159. //xt += Math.pow(ruokakerroin*foods[i].fw,2)*xtd/Math.pow(dist,ruokapower+1);
  160. //yt += Math.pow(ruokakerroin*foods[i].fw,2)*ytd/Math.pow(dist,ruokapower+1);
  161. xt += Math.pow(foods[i].gr,2)*xtd/Math.pow(dist,ruokapower+1);
  162. yt += Math.pow(foods[i].gr,2)*ytd/Math.pow(dist,ruokapower+1);
  163. }
  164. xtd = (grd-snake.xx);
  165. ytd = (grd-snake.yy);
  166. dist = Math.sqrt(xtd*xtd + ytd*ytd);
  167. xt += xtd/Math.pow(grd-dist,keskipower+1)*DNA[6];
  168. yt += ytd/Math.pow(grd-dist,keskipower+1)*DNA[6];
  169. xt += xtd/grd*DNA[7];
  170. yt += ytd/grd*DNA[7];
  171. }
  172. xm = xt*kerroin;
  173. ym = yt*kerroin;
  174. lsxm = -xm;
  175. lsym = -ym;
  176. if (accelerate)
  177. {
  178. setAcceleration(1);
  179. }
  180. else
  181. {
  182. setAcceleration(0);
  183. }
  184. //console.log("xx:" + view_xx + "yy:" + view_yy);
  185. //console.log("snake.xx:" + snake.xx + "snake.yy:" + snake.yy);
  186. //console.log("snake.fx:" + snake.fx + "snake.fy:" + snake.fy);
  187. //console.log("fvx:" + fvx + "fvy:" + fvy);
  188. //console.log("");
  189. //console.log("foods_c:" + foods_c);
  190. //console.log("snakes.length:" + snakes.length);
  191. //console.log("D:" + Math.sqrt(xm*xm + ym*ym));
  192. lastscore = Math.floor(150 * (fpsls[snake.sct] + snake.fam / fmlts[snake.sct] - 1) - 50) / 10;
  193. if (!lastscore)
  194. {
  195. lastscore = 1;
  196. }
  197. lastrank = rank;
  198. if (!lastrank)
  199. {
  200. lastrank = 500;
  201. }
  202. }
  203. else
  204. {
  205. if (!injected_dead)
  206. {
  207. injected_dead = true;
  208. if (lastscore>bestscore)
  209. {
  210. console.log("Last score: " + lastscore + "(new best)");
  211. bestscore = lastscore;
  212. BESTSCORE = bestscore;
  213. }
  214. else
  215. {
  216. console.log("Last score: " + lastscore + " Best: " + bestscore);
  217. }
  218. if (lastrank<bestrank)
  219. {
  220. console.log("Last rank: " + lastrank + "(new best)");
  221. bestrank = lastrank;
  222. BESTRANK = bestrank;
  223. }
  224. else
  225. {
  226. console.log("Last rank: " + lastrank + " Best: " + bestrank);
  227. }
  228. if (testingdna>0)
  229. {
  230. TESTSCORE = lastscore/(lastrank+1);
  231. }
  232. else
  233. {
  234. REALSCORE = (REALSCORE+lastscore/lastrank)/2;
  235. }
  236. lastscore = 0;
  237. for (var key in DNA)
  238. {
  239. if (TESTSCORE > REALSCORE)
  240. {
  241. var mul = TESTSCORE/REALSCORE
  242. REALDNA[key] = (REALDNA[key] + TESTDNA[key]*mul)/(1+mul);
  243. REALDNA[key] = Math.round(REALDNA[key]*precision)/precision;
  244. }
  245. if (testingdna<0)
  246. {
  247. TESTDNA[key] = REALDNA[key] + REALDNA[key]*(Math.random() - Math.random())*learnrate;
  248. TESTDNA[key] = Math.round(TESTDNA[key]*precision)/precision;
  249. }
  250. }
  251. savedna();
  252. testingdna = -testingdna;
  253. if (testingdna>0)
  254. {
  255. DNA = TESTDNA.slice();
  256. }
  257. else
  258. {
  259. DNA = REALDNA.slice();
  260. }
  261. //console.log("DNA = [" + DNA + "];");
  262. setTimeout(connect, 3000);
  263. //console.log("Reconnecting");
  264. }
  265. }
  266. }
  267. }
  268. var injectbot = function() {
  269. if (typeof(redraw) != "undefined")
  270. {
  271. oldredraw = redraw;
  272. redraw = function() {
  273. INJECTED();
  274. oldredraw();
  275. }
  276. console.log("injected")
  277. window.onmousemove = null;
  278. }
  279. else
  280. {
  281. setTimeout(injectbot, 1000);
  282. console.log("retrying")
  283. }
  284. }
  285. injectbot();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址