Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.57 KB | None | 0 0
  1. // ==UserScript==
  2. // @name TagPro defense bot sniper
  3. // @description f to attack g to snipe. make wise use dont get caught.
  4. // @version
  5. // @include http://*.koalabeast.com:*
  6. // @include http://*.jukejuice.com:*
  7. // @include http://*.newcompte.*
  8. // ==/UserScript==
  9. /*
  10. Tested against Chromium build with Object.observe and acts EXACTLY the same,
  11. though Chromium build is MUCH faster
  12.  
  13. Trying to stay as close to the spec as possible,
  14. this is a work in progress, feel free to comment/update
  15.  
  16. Specification:
  17. http://wiki.ecmascript.org/doku.php?id=harmony:observe
  18.  
  19. Built using parts of:
  20. https://github.com/tvcutsem/harmony-reflect/blob/master/examples/observer.js
  21.  
  22. Limits so far;
  23. Built using polling... Will update again with polling/getter&setters to make things better at some point
  24.  
  25. TODO:
  26. Add support for Object.prototype.watch -> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/watch
  27. */
  28. if(!Object.observe){
  29. (function(extend, global){
  30. "use strict";
  31. var isCallable = (function(toString){
  32. var s = toString.call(toString),
  33. u = typeof u;
  34. return typeof global.alert === "object" ?
  35. function isCallable(f){
  36. return s === toString.call(f) || (!!f && typeof f.toString == u && typeof f.valueOf == u && /^\s*\bfunction\b/.test("" + f));
  37. }:
  38. function isCallable(f){
  39. return s === toString.call(f);
  40. }
  41. ;
  42. })(extend.prototype.toString);
  43. // isNode & isElement from http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object
  44. //Returns true if it is a DOM node
  45. var isNode = function isNode(o){
  46. return (
  47. typeof Node === "object" ? o instanceof Node :
  48. o && typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName==="string"
  49. );
  50. }
  51. //Returns true if it is a DOM element
  52. var isElement = function isElement(o){
  53. return (
  54. typeof HTMLElement === "object" ? o instanceof HTMLElement : //DOM2
  55. o && typeof o === "object" && o !== null && o.nodeType === 1 && typeof o.nodeName==="string"
  56. );
  57. }
  58. var _isImmediateSupported = (function(){
  59. return !!global.setImmediate;
  60. })();
  61. var _doCheckCallback = (function(){
  62. if(_isImmediateSupported){
  63. return function _doCheckCallback(f){
  64. return setImmediate(f);
  65. };
  66. }else{
  67. return function _doCheckCallback(f){
  68. return setTimeout(f, 10);
  69. };
  70. }
  71. })();
  72. var _clearCheckCallback = (function(){
  73. if(_isImmediateSupported){
  74. return function _clearCheckCallback(id){
  75. clearImmediate(id);
  76. };
  77. }else{
  78. return function _clearCheckCallback(id){
  79. clearTimeout(id);
  80. };
  81. }
  82. })();
  83. var isNumeric=function isNumeric(n){
  84. return !isNaN(parseFloat(n)) && isFinite(n);
  85. };
  86. var sameValue = function sameValue(x, y){
  87. if(x===y){
  88. return x !== 0 || 1 / x === 1 / y;
  89. }
  90. return x !== x && y !== y;
  91. };
  92. var isAccessorDescriptor = function isAccessorDescriptor(desc){
  93. if (typeof(desc) === 'undefined'){
  94. return false;
  95. }
  96. return ('get' in desc || 'set' in desc);
  97. };
  98. var isDataDescriptor = function isDataDescriptor(desc){
  99. if (typeof(desc) === 'undefined'){
  100. return false;
  101. }
  102. return ('value' in desc || 'writable' in desc);
  103. };
  104.  
  105. var validateArguments = function validateArguments(O, callback, accept){
  106. if(typeof(O)!=='object'){
  107. // Throw Error
  108. throw new TypeError("Object.observeObject called on non-object");
  109. }
  110. if(isCallable(callback)===false){
  111. // Throw Error
  112. throw new TypeError("Object.observeObject: Expecting function");
  113. }
  114. if(Object.isFrozen(callback)===true){
  115. // Throw Error
  116. throw new TypeError("Object.observeObject: Expecting unfrozen function");
  117. }
  118. if (accept !== undefined) {
  119. if (!Array.isArray(accept)) {
  120. throw new TypeError("Object.observeObject: Expecting acceptList in the form of an array");
  121. }
  122. }
  123. };
  124.  
  125. var Observer = (function Observer(){
  126. var wraped = [];
  127. var Observer = function Observer(O, callback, accept){
  128. validateArguments(O, callback, accept);
  129. if (!accept) {
  130. accept = ["add", "update", "delete", "reconfigure", "setPrototype", "preventExtensions"];
  131. }
  132. Object.getNotifier(O).addListener(callback, accept);
  133. if(wraped.indexOf(O)===-1){
  134. wraped.push(O);
  135. }else{
  136. Object.getNotifier(O)._checkPropertyListing();
  137. }
  138. };
  139.  
  140. Observer.prototype.deliverChangeRecords = function Observer_deliverChangeRecords(O){
  141. Object.getNotifier(O).deliverChangeRecords();
  142. };
  143.  
  144. wraped.lastScanned = 0;
  145. var f = (function f(wrapped){
  146. return function _f(){
  147. var i = 0, l = wrapped.length, startTime = new Date(), takingTooLong=false;
  148. for(i=wrapped.lastScanned; (i<l)&&(!takingTooLong); i++){
  149. if(_indexes.indexOf(wrapped[i]) > -1){
  150. Object.getNotifier(wrapped[i])._checkPropertyListing();
  151. takingTooLong=((new Date())-startTime)>100; // make sure we don't take more than 100 milliseconds to scan all objects
  152. }else{
  153. wrapped.splice(i, 1);
  154. i--;
  155. l--;
  156. }
  157. }
  158. wrapped.lastScanned=i<l?i:0; // reset wrapped so we can make sure that we pick things back up
  159. _doCheckCallback(_f);
  160. };
  161. })(wraped);
  162. _doCheckCallback(f);
  163. return Observer;
  164. })();
  165.  
  166. var Notifier = function Notifier(watching){
  167. var _listeners = [], _acceptLists = [], _updates = [], _updater = false, properties = [], values = [];
  168. var self = this;
  169. Object.defineProperty(self, '_watching', {
  170. enumerable: true,
  171. get: (function(watched){
  172. return function(){
  173. return watched;
  174. };
  175. })(watching)
  176. });
  177. var wrapProperty = function wrapProperty(object, prop){
  178. var propType = typeof(object[prop]), descriptor = Object.getOwnPropertyDescriptor(object, prop);
  179. if((prop==='getNotifier')||isAccessorDescriptor(descriptor)||(!descriptor.enumerable)){
  180. return false;
  181. }
  182. if((object instanceof Array)&&isNumeric(prop)){
  183. var idx = properties.length;
  184. properties[idx] = prop;
  185. values[idx] = object[prop];
  186. return true;
  187. }
  188. (function(idx, prop){
  189. properties[idx] = prop;
  190. values[idx] = object[prop];
  191. function getter(){
  192. return values[getter.info.idx];
  193. }
  194. function setter(value){
  195. if(!sameValue(values[setter.info.idx], value)){
  196. Object.getNotifier(object).queueUpdate(object, prop, 'update', values[setter.info.idx]);
  197. values[setter.info.idx] = value;
  198. }
  199. }
  200. getter.info = setter.info = {
  201. idx: idx
  202. };
  203. Object.defineProperty(object, prop, {
  204. get: getter,
  205. set: setter
  206. });
  207. })(properties.length, prop);
  208. return true;
  209. };
  210. self._checkPropertyListing = function _checkPropertyListing(dontQueueUpdates){
  211. var object = self._watching, keys = Object.keys(object), i=0, l=keys.length;
  212. var newKeys = [], oldKeys = properties.slice(0), updates = [];
  213. var prop, queueUpdates = !dontQueueUpdates, propType, value, idx, aLength;
  214.  
  215. if(object instanceof Array){
  216. aLength = self._oldLength;//object.length;
  217. //aLength = object.length;
  218. }
  219.  
  220. for(i=0; i<l; i++){
  221. prop = keys[i];
  222. value = object[prop];
  223. propType = typeof(value);
  224. if((idx = properties.indexOf(prop))===-1){
  225. if(wrapProperty(object, prop)&&queueUpdates){
  226. self.queueUpdate(object, prop, 'add', null, object[prop]);
  227. }
  228. }else{
  229. if(!(object instanceof Array)||(isNumeric(prop))){
  230. if(values[idx] !== value){
  231. if(queueUpdates){
  232. self.queueUpdate(object, prop, 'update', values[idx], value);
  233. }
  234. values[idx] = value;
  235. }
  236. }
  237. oldKeys.splice(oldKeys.indexOf(prop), 1);
  238. }
  239. }
  240.  
  241. if(object instanceof Array && object.length !== aLength){
  242. if(queueUpdates){
  243. self.queueUpdate(object, 'length', 'update', aLength, object);
  244. }
  245. self._oldLength = object.length;
  246. }
  247.  
  248. if(queueUpdates){
  249. l = oldKeys.length;
  250. for(i=0; i<l; i++){
  251. idx = properties.indexOf(oldKeys[i]);
  252. self.queueUpdate(object, oldKeys[i], 'delete', values[idx]);
  253. properties.splice(idx,1);
  254. values.splice(idx,1);
  255. for(var i=idx;i<properties.length;i++){
  256. if(!(properties[i] in object))
  257. continue;
  258. var getter = Object.getOwnPropertyDescriptor(object,properties[i]).get;
  259. if(!getter)
  260. continue;
  261. var info = getter.info;
  262. info.idx = i;
  263. }
  264. };
  265. }
  266. };
  267. self.addListener = function Notifier_addListener(callback, accept){
  268. var idx = _listeners.indexOf(callback);
  269. if(idx===-1){
  270. _listeners.push(callback);
  271. _acceptLists.push(accept);
  272. }
  273. else {
  274. _acceptLists[idx] = accept;
  275. }
  276. };
  277. self.removeListener = function Notifier_removeListener(callback){
  278. var idx = _listeners.indexOf(callback);
  279. if(idx>-1){
  280. _listeners.splice(idx, 1);
  281. _acceptLists.splice(idx, 1);
  282. }
  283. };
  284. self.listeners = function Notifier_listeners(){
  285. return _listeners;
  286. };
  287. self.queueUpdate = function Notifier_queueUpdate(what, prop, type, was){
  288. this.queueUpdates([{
  289. type: type,
  290. object: what,
  291. name: prop,
  292. oldValue: was
  293. }]);
  294. };
  295. self.queueUpdates = function Notifier_queueUpdates(updates){
  296. var self = this, i = 0, l = updates.length||0, update;
  297. for(i=0; i<l; i++){
  298. update = updates[i];
  299. _updates.push(update);
  300. }
  301. if(_updater){
  302. _clearCheckCallback(_updater);
  303. }
  304. _updater = _doCheckCallback(function(){
  305. _updater = false;
  306. self.deliverChangeRecords();
  307. });
  308. };
  309. self.deliverChangeRecords = function Notifier_deliverChangeRecords(){
  310. var i = 0, l = _listeners.length,
  311. //keepRunning = true, removed as it seems the actual implementation doesn't do this
  312. // In response to BUG #5
  313. retval;
  314. for(i=0; i<l; i++){
  315. if(_listeners[i]){
  316. var currentUpdates;
  317. if (_acceptLists[i]) {
  318. currentUpdates = [];
  319. for (var j = 0, updatesLength = _updates.length; j < updatesLength; j++) {
  320. if (_acceptLists[i].indexOf(_updates[j].type) !== -1) {
  321. currentUpdates.push(_updates[j]);
  322. }
  323. }
  324. }
  325. else {
  326. currentUpdates = _updates;
  327. }
  328. if (currentUpdates.length) {
  329. if(_listeners[i]===console.log){
  330. console.log(currentUpdates);
  331. }else{
  332. _listeners[i](currentUpdates);
  333. }
  334. }
  335. }
  336. }
  337. _updates=[];
  338. };
  339. self.notify = function Notifier_notify(changeRecord) {
  340. if (typeof changeRecord !== "object" || typeof changeRecord.type !== "string") {
  341. throw new TypeError("Invalid changeRecord with non-string 'type' property");
  342. }
  343. changeRecord.object = watching;
  344. self.queueUpdates([changeRecord]);
  345. };
  346. self._checkPropertyListing(true);
  347. };
  348.  
  349. var _notifiers=[], _indexes=[];
  350. extend.getNotifier = function Object_getNotifier(O){
  351. var idx = _indexes.indexOf(O), notifier = idx>-1?_notifiers[idx]:false;
  352. if(!notifier){
  353. idx = _indexes.length;
  354. _indexes[idx] = O;
  355. notifier = _notifiers[idx] = new Notifier(O);
  356. }
  357. return notifier;
  358. };
  359. extend.observe = function Object_observe(O, callback, accept){
  360. // For Bug 4, can't observe DOM elements tested against canry implementation and matches
  361. if(!isElement(O)){
  362. return new Observer(O, callback, accept);
  363. }
  364. };
  365. extend.unobserve = function Object_unobserve(O, callback){
  366. validateArguments(O, callback);
  367. var idx = _indexes.indexOf(O),
  368. notifier = idx>-1?_notifiers[idx]:false;
  369. if (!notifier){
  370. return;
  371. }
  372. notifier.removeListener(callback);
  373. if (notifier.listeners().length === 0){
  374. _indexes.splice(idx, 1);
  375. _notifiers.splice(idx, 1);
  376. }
  377. };
  378. })(Object, this);
  379. }
  380. tagpro.ready(function tagBot() {
  381. if (!tagpro.playerId) return setTimeout(tagBot, 250);
  382.  
  383. var snipe = false,
  384. attack = false,
  385. sentDir = {r: false, l: false, d: false, u: false},
  386. keyDir = {r: false, l: false, d: false, u: false},
  387. keyCount = 1,
  388. tse = tagpro.socket.emit;
  389.  
  390. tagpro.socket.emit = function (t, n) {
  391. if (t === 'keydown') {
  392. if (n.k === 'right') sentDir.r = true;
  393. if (n.k === 'left') sentDir.l = true;
  394. if (n.k === 'down') sentDir.d = true;
  395. if (n.k === 'up') sentDir.u = true;
  396. }
  397. if (t === 'keyup') {
  398. if (n.k === 'right') sentDir.r = false;
  399. if (n.k === 'left') sentDir.l = false;
  400. if (n.k === 'down') sentDir.d = false;
  401. if (n.k === 'up') sentDir.u = false;
  402. }
  403. if (n.t) n.t = keyCount++;
  404. tse(t, n);
  405. };
  406.  
  407. document.onkeydown = function (d) {
  408. d = d || window.event;
  409. switch(d.keyCode) {
  410. case 18:
  411. if (!attack) {
  412. attack = true;
  413. }
  414. break;
  415. case 88:
  416. if (!snipe) {
  417. snipe = true;
  418. }
  419. break;
  420. case tagpro.keys.right[0]: case tagpro.keys.right[1]: case tagpro.keys.right[2]:
  421. if (!keyDir.r) {
  422. if (!tagpro.disableControls && !sentDir.r) tagpro.socket.emit('keydown', {k: 'right', t: keyCount});
  423. keyDir.r = true;
  424. }
  425. break;
  426. case tagpro.keys.left[0]: case tagpro.keys.left[1]: case tagpro.keys.left[2]:
  427. if (!keyDir.l) {
  428. if (!tagpro.disableControls && !sentDir.l) tagpro.socket.emit('keydown', {k: 'left', t: keyCount});
  429. keyDir.l = true;
  430. }
  431. break;
  432. case tagpro.keys.down[0]: case tagpro.keys.down[1]: case tagpro.keys.down[2]:
  433. if (!keyDir.d) {
  434. if (!tagpro.disableControls && !sentDir.d) tagpro.socket.emit('keydown', {k: 'down', t: keyCount});
  435. keyDir.d = true;
  436. }
  437. break;
  438. case tagpro.keys.up[0]: case tagpro.keys.up[1]: case tagpro.keys.up[2]:
  439. if (!keyDir.u) {
  440. if (!tagpro.disableControls && !sentDir.u) tagpro.socket.emit('keydown', {k: 'up', t: keyCount});
  441. keyDir.u = true;
  442. }
  443. break;
  444. }
  445. };
  446.  
  447. document.onkeyup = function (u) {
  448. u = u || window.event;
  449. switch(u.keyCode) {
  450. case 18:
  451. attack = false;
  452. if (!keyDir.r && sentDir.r) tagpro.socket.emit('keyup', {k: 'right', t: keyCount});
  453. if (!keyDir.l && sentDir.l) tagpro.socket.emit('keyup', {k: 'left', t: keyCount});
  454. if (!keyDir.d && sentDir.d) tagpro.socket.emit('keyup', {k: 'down', t: keyCount});
  455. if (!keyDir.u && sentDir.u) tagpro.socket.emit('keyup', {k: 'up', t: keyCount});
  456. if (keyDir.r && !sentDir.r) tagpro.socket.emit('keydown', {k: 'right', t: keyCount});
  457. if (keyDir.l && !sentDir.l) tagpro.socket.emit('keydown', {k: 'left', t: keyCount});
  458. if (keyDir.d && !sentDir.d) tagpro.socket.emit('keydown', {k: 'down', t: keyCount});
  459. if (keyDir.u && !sentDir.u) tagpro.socket.emit('keydown', {k: 'up', t: keyCount});
  460. break;
  461. case 88:
  462. snipe = false;
  463. attack = false;
  464. if (!keyDir.r && sentDir.r) tagpro.socket.emit('keyup', {k: 'right', t: keyCount});
  465. if (!keyDir.l && sentDir.l) tagpro.socket.emit('keyup', {k: 'left', t: keyCount});
  466. if (!keyDir.d && sentDir.d) tagpro.socket.emit('keyup', {k: 'down', t: keyCount});
  467. if (!keyDir.u && sentDir.u) tagpro.socket.emit('keyup', {k: 'up', t: keyCount});
  468. if (keyDir.r && !sentDir.r) tagpro.socket.emit('keydown', {k: 'right', t: keyCount});
  469. if (keyDir.l && !sentDir.l) tagpro.socket.emit('keydown', {k: 'left', t: keyCount});
  470. if (keyDir.d && !sentDir.d) tagpro.socket.emit('keydown', {k: 'down', t: keyCount});
  471. if (keyDir.u && !sentDir.u) tagpro.socket.emit('keydown', {k: 'up', t: keyCount});
  472. break;
  473. case tagpro.keys.right[0]: case tagpro.keys.right[1]: case tagpro.keys.right[2]:
  474. if (!tagpro.disableControls && sentDir.r) tagpro.socket.emit('keyup', {k: 'right', t: keyCount});
  475. keyDir.r = false;
  476. break;
  477. case tagpro.keys.left[0]: case tagpro.keys.left[1]: case tagpro.keys.left[2]:
  478. if (!tagpro.disableControls && sentDir.l) tagpro.socket.emit('keyup', {k: 'left', t: keyCount});
  479. keyDir.l = false;
  480. break;
  481. case tagpro.keys.down[0]: case tagpro.keys.down[1]: case tagpro.keys.down[2]:
  482. if (!tagpro.disableControls && sentDir.d) tagpro.socket.emit('keyup', {k: 'down', t: keyCount});
  483. keyDir.d = false;
  484. break;
  485. case tagpro.keys.up[0]: case tagpro.keys.up[1]: case tagpro.keys.up[2]:
  486. if (!tagpro.disableControls && sentDir.u) tagpro.socket.emit('keyup', {k: 'up', t: keyCount});
  487. keyDir.u = false;
  488. break;
  489. }
  490. };
  491.  
  492. Object.observe(tagpro.players, function(changes) {
  493. changes.forEach(function(change) {
  494. if (change.type === 'add') watchPlayers();
  495. });
  496. });
  497.  
  498. function watchPlayers() {
  499. for (var id in tagpro.players) {
  500. if (!tagpro.players.hasOwnProperty(id)) break;
  501. var player = tagpro.players[id];
  502. if (player.watched === undefined) {
  503. player.sx = 0; player.sy = 0;
  504. player.pr = 0; player.pl = 0;
  505. player.pd = 0; player.pu = 0;
  506. Object.observe(player, function(changes) {
  507. changes.forEach(function(change) {
  508. if (change.name === 'x') getSpeed(changes[0].object, change.oldValue);
  509. if (change.name === 'y') getSpeed(changes[0].object, undefined, change.oldValue);
  510. if (changes[0].object.id !== tagpro.playerId) {
  511. switch (change.name) {
  512. case 'right': case 'left': case 'down': case 'up':
  513. getKeys(changes[0].object);
  514. break;
  515. }
  516. }
  517. });
  518. });
  519. player.watched = true;
  520. }
  521. }
  522. }
  523. watchPlayers();
  524.  
  525. function getSpeed(player, x, y) {
  526. if (x) {
  527. player.sx = player.lx > 0 ? Math.abs(player.x-x)*34 : -Math.abs(player.x-x)*34;
  528. if (!player.lx) player.sx = 0;
  529. }
  530. if (y) {
  531. player.sy = player.ly > 0 ? Math.abs(player.y-y)*34 : -Math.abs(player.y-y)*34;
  532. if (!player.ly) player.sy = 0;
  533. }
  534. }
  535.  
  536. function getKeys(player) {
  537. if (player.right && !player.left) player.pr = 1; else player.pr = 0;
  538. if (player.left && !player.right) player.pl = -1; else player.pl = 0;
  539. if (player.down && !player.up) player.pd = 1; else player.pd = 0;
  540. if (player.up && !player.down) player.pu = -1; else player.pu = 0;
  541. }
  542.  
  543. function attackEnemy() {
  544. var distance,
  545. target,
  546. closest = 9999,
  547. seek = {x: 0, y: 0},
  548. self = tagpro.players[tagpro.playerId];
  549. for (var id in tagpro.players) {
  550. if (tagpro.players.hasOwnProperty(id)) {
  551. var player = tagpro.players[id];
  552. if (player.team !== self.team && player.draw && !player.dead) {
  553. distance = Math.sqrt(Math.pow(player.x+player.lx*30-self.x+self.lx*30, 2)+Math.pow(player.y+player.ly*30-self.y+self.ly*30, 2));
  554. if (attack) {
  555. if (player.flag && distance < 400) {
  556. target = player; break;
  557. } else {
  558. if (distance < closest) {closest = distance; target = player;}
  559. }
  560. }
  561. if (snipe) {
  562. if (player.flag) {
  563. target = player; break;
  564. } else {
  565. if (distance < closest) {closest = distance; target = player;}
  566. }
  567. }
  568. }
  569. }
  570. }
  571. if (target) {
  572. var difX = Math.abs((self.x+self.sx)-(target.x+target.sx)),
  573. difY = Math.abs((self.y+self.sy)-(target.y+target.sy)),
  574. speedDifX = self.sx-target.sx,
  575. speedDifY = self.sy-target.sy,
  576. pressR = target.pr ? Math.min((target.pr*20-speedDifX*0.07)*difY/40, 160) : 0,
  577. pressL = target.pl ? Math.max((target.pl*20-speedDifX*0.07)*difY/40, -160) : 0,
  578. pressD = target.pd ? Math.min((target.pd*20-speedDifY*0.07)*difX/40, 160) : 0,
  579. pressU = target.pu ? Math.max((target.pu*20-speedDifY*0.07)*difX/40, -160) : 0,
  580. pR = target.pr ? target.pr*(1+difY/25) : 0,
  581. pL = target.pl ? target.pl*(1+difY/25) : 0,
  582. pD = target.pd ? target.pd*(1+difX/25) : 0,
  583. pU = target.pu ? target.pu*(1+difX/25) : 0;
  584. if (attack) {
  585. seek.x = (target.x+target.sx*((difX/40+5)/6)+pressR+pressL-speedDifX*difY/400)-(self.x+self.sx*((difX/40+5)/6));
  586. seek.y = (target.y+target.sy*((difY/40+5)/6)+pressD+pressU-speedDifY*difX/400)-(self.y+self.sy*((difY/40+5)/6));
  587. if (seek.x > 6 && !sentDir.r) tagpro.socket.emit('keydown', {k: 'right', t: keyCount});
  588. else {if (seek.x < 3 && sentDir.r) tagpro.socket.emit('keyup', {k: 'right', t: keyCount});}
  589. if (seek.x < -6 && !sentDir.l) tagpro.socket.emit('keydown', {k: 'left', t: keyCount});
  590. else {if (seek.x > -3 && sentDir.l) tagpro.socket.emit('keyup', {k: 'left', t: keyCount});}
  591. if (seek.y > 6 && !sentDir.d) tagpro.socket.emit('keydown', {k: 'down', t: keyCount});
  592. else {if (seek.y < 3 && sentDir.d) tagpro.socket.emit('keyup', {k: 'down', t: keyCount});}
  593. if (seek.y < -6 && !sentDir.u) tagpro.socket.emit('keydown', {k: 'up', t: keyCount});
  594. else {if (seek.y > -3 && sentDir.u) tagpro.socket.emit('keyup', {k: 'up', t: keyCount});}
  595. }
  596. if (snipe && !attack) {
  597. if (Math.abs(self.sx) < 142 || Math.abs(self.sy) < 142) {
  598. seek.x = (target.x+target.sx*(0.5+difY/380)+pR+pL)-(self.x+self.sx*(1+difY/40));
  599. seek.y = (target.y+target.sy*(0.5+difX/380)+pD+pU)-(self.y+self.sy*(1+difX/40));
  600. var timerLength = 140,
  601. timer = Date.now() % timerLength,
  602. timeX = Math.abs(seek.x/seek.y)*timerLength,
  603. timeY = Math.abs(seek.y/seek.x)*timerLength;
  604. if (seek.x > Math.abs(seek.y)) {
  605. if (sentDir.l) tagpro.socket.emit('keyup', {k: 'left', t: keyCount});
  606. if (!sentDir.r) tagpro.socket.emit('keydown', {k: 'right', t: keyCount});
  607. if (timer < timeY && seek.y > 0) {if (!sentDir.d) tagpro.socket.emit('keydown', {k: 'down', t: keyCount});}
  608. else {if (sentDir.d) tagpro.socket.emit('keyup', {k: 'down', t: keyCount});}
  609. if (timer < timeY && seek.y < 0) {if (!sentDir.u) tagpro.socket.emit('keydown', {k: 'up', t: keyCount});}
  610. else {if (sentDir.u) tagpro.socket.emit('keyup', {k: 'up', t: keyCount});}
  611. }
  612. if (seek.x < -Math.abs(seek.y)) {
  613. if (sentDir.r) tagpro.socket.emit('keyup', {k: 'right', t: keyCount});
  614. if (!sentDir.l) tagpro.socket.emit('keydown', {k: 'left', t: keyCount});
  615. if (timer < timeY && seek.y > 0) {if (!sentDir.d) tagpro.socket.emit('keydown', {k: 'down', t: keyCount});}
  616. else {if (sentDir.d) tagpro.socket.emit('keyup', {k: 'down', t: keyCount});}
  617. if (timer < timeY && seek.y < 0) {if (!sentDir.u) tagpro.socket.emit('keydown', {k: 'up', t: keyCount});}
  618. else {if (sentDir.u) tagpro.socket.emit('keyup', {k: 'up', t: keyCount});}
  619. }
  620. if (seek.y > Math.abs(seek.x)) {
  621. if (sentDir.u) tagpro.socket.emit('keyup', {k: 'up', t: keyCount});
  622. if (!sentDir.d) tagpro.socket.emit('keydown', {k: 'down', t: keyCount});
  623. if (timer < timeX && seek.x > 0) {if (!sentDir.r) tagpro.socket.emit('keydown', {k: 'right', t: keyCount});}
  624. else {if (sentDir.r) tagpro.socket.emit('keyup', {k: 'right', t: keyCount});}
  625. if (timer < timeX && seek.x < 0) {if (!sentDir.l) tagpro.socket.emit('keydown', {k: 'left', t: keyCount});}
  626. else {if (sentDir.l) tagpro.socket.emit('keyup', {k: 'left', t: keyCount});}
  627. }
  628. if (seek.y < -Math.abs(seek.x)) {
  629. if (sentDir.d) tagpro.socket.emit('keyup', {k: 'down', t: keyCount});
  630. if (!sentDir.u) tagpro.socket.emit('keydown', {k: 'up', t: keyCount});
  631. if (timer < timeX && seek.x > 0) {if (!sentDir.r) tagpro.socket.emit('keydown', {k: 'right', t: keyCount});}
  632. else {if (sentDir.r) tagpro.socket.emit('keyup', {k: 'right', t: keyCount});}
  633. if (timer < timeX && seek.x < 0) {if (!sentDir.l) tagpro.socket.emit('keydown', {k: 'left', t: keyCount});}
  634. else {if (sentDir.l) tagpro.socket.emit('keyup', {k: 'left', t: keyCount});}
  635. }
  636. } else {
  637. if (!keyDir.r && sentDir.r) tagpro.socket.emit('keyup', {k: 'right', t: keyCount});
  638. if (!keyDir.l && sentDir.l) tagpro.socket.emit('keyup', {k: 'left', t: keyCount});
  639. if (!keyDir.d && sentDir.d) tagpro.socket.emit('keyup', {k: 'down', t: keyCount});
  640. if (!keyDir.u && sentDir.u) tagpro.socket.emit('keyup', {k: 'up', t: keyCount});
  641. if (keyDir.r && !sentDir.r) tagpro.socket.emit('keydown', {k: 'right', t: keyCount});
  642. if (keyDir.l && !sentDir.l) tagpro.socket.emit('keydown', {k: 'left', t: keyCount});
  643. if (keyDir.d && !sentDir.d) tagpro.socket.emit('keydown', {k: 'down', t: keyCount});
  644. if (keyDir.u && !sentDir.u) tagpro.socket.emit('keydown', {k: 'up', t: keyCount});
  645. attack = true;
  646. }
  647. }
  648. }
  649. setTimeout(attackEnemy, 11);
  650. }
  651. attackEnemy();
  652. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement