Advertisement
Guest User

nobody's kite

a guest
Mar 30th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.34 KB | None | 0 0
  1. //send_item("nobodyhere",0,1)
  2. //send_item("Iamanoob",0,1)
  3. //send_item("nobodythat",3,100)
  4. //send_item("nobodymerch",2,1)
  5. var runaway=90;//set how far away to run
  6. var minxpallowed=10000;//minimum xp for target
  7. var maxattackmonster=0;//number of hits it takes targeted monster to kill you
  8. var monster="phoenix";
  9. var kite=2//0 = no kite, 1 = target based kite, 2 = centerpoint based kite, 3 = static point kite
  10. useSupershot=false;
  11. useBurst = false;
  12. useCursing = true;
  13.  
  14.  
  15. //whitelists
  16. awhitelist = ['phoenix', 'pinkgoo','mvampire'];
  17. swhitelist = ['vitscroll'];
  18. //show_json(character);
  19. setInterval(function()
  20. {
  21.  
  22. //set_message(character.real_x+ ", " + character.real_y);
  23. //drawstuff(target);
  24.  
  25. hpmp();
  26.  
  27. var target=get_targeted_monster();
  28. target=targetmonster(target,monster);
  29. var nexttarget=getnexttarget(target,monster);
  30. //handleboss(target);
  31. if (kite==0){if (target) run_away(get_nearest_monster(),runaway);}
  32. else {kiteme(target,runaway,kite);}
  33. if(kite==0 || target) moveinrange(target,nexttarget);
  34. attacktarget(target,nexttarget);
  35. //set_message(`${keyName}`);
  36. if (useSupershot && target.hp > 6000 && character.ctype === 'ranger') {
  37. supershot(target);
  38. }
  39. if (useBurst && target.hp > 6000 && character.ctype === 'mage') {
  40. burst(target);
  41.  
  42. }
  43. if (useCursing && target.hp > 3000 && character.ctype === 'priest') {
  44. curse(target);
  45. }
  46. //exchangeAll();
  47.  
  48.  
  49. },1000/4); // Loops every 1/4 seconds.
  50.  
  51. setInterval(function()
  52. {
  53. drawstuff(get_targeted_monster());
  54. },10);
  55.  
  56.  
  57.  
  58.  
  59. var xptimer=0;
  60. setInterval(function()
  61. {
  62. if (xptimer==0)
  63. {initGUI()
  64. init_xptimer()}
  65. updateGUI();
  66. update_xptimer();
  67. xptimer++;
  68. //combination(3);//maxlevel argument
  69. //if(character.ctype === 'merchant')
  70. //auto_upgrade('quiver',7)
  71.  
  72. },1000)
  73.  
  74.  
  75.  
  76.  
  77. var tempkite=0;
  78. var temprun=0;
  79. var istempkite=false;
  80. function handleboss(target)
  81. {
  82. if (target.mtype == "phoenix")
  83. { if(!istempkite) {tempkite=kite; kite=2;
  84. temprun=runaway; runaway=120;
  85. istempkite=true}}
  86. else if (target.mtype == "mvampire")
  87. { if(!istempkite) {tempkite=kite; kite=2;
  88. temprun=runaway; runaway=120;
  89. istempkite=true}}
  90. else if(istempkite==true) {istempkite=false; kite=tempkite;runaway=temprun}
  91. }
  92.  
  93. function hpmp()
  94. {
  95.  
  96. if (character.hp <= character.max_hp -200 && new Date() > parent.next_potion) {
  97. parent.use('hp');
  98. if (character.hp <= 400)
  99. heal(character)
  100. //Panic Button
  101. }
  102.  
  103. if (character.mp <= character.max_mp - 300 && new Date() > parent.next_potion)
  104. parent.use('mp');
  105.  
  106. }
  107.  
  108. function targetmonster(target,montype)
  109. { var targ;
  110. targ=get_next_nearest_monster({path_check:true,monster_type:montype,no_target:true})
  111. if (targ) {if (montype==targ.mtype) {change_target(targ); target=targ;}
  112. if (awhitelist.includes(targ))
  113. {change_target(nexttarget); target=targ;}
  114. }
  115.  
  116. if(!target || target.target && target.target != character.name)
  117. {
  118. target=get_next_nearest_monster({min_xp:minxpallowed,max_att:(character.max_hp/maxattackmonster),path_check:true,
  119. no_target:true,attacking_me:true});
  120. if(target) change_target(target);
  121. else
  122. {
  123. //set_message("No Monsters");
  124. return false;
  125. }
  126. }
  127. return target;
  128.  
  129. }
  130. function getnexttarget(target,montype)
  131. {
  132. var nexttarget = get_next_nearest_monster({path_check:true,same_target:target.id,monster_type:montype,no_target:true});
  133.  
  134. if (!nexttarget)
  135. nexttarget = get_next_nearest_monster({min_xp:minxpallowed,max_att: (character.max_hp/maxattackmonster),path_check:true,same_target:target.id,
  136. no_target:true, attacking_me:true});
  137. return nexttarget;
  138. }
  139.  
  140. function targetdirection(target)
  141. {
  142. if(target)
  143. {
  144. var xdist = target.real_x-character.real_x;
  145. var ydist = target.real_y-character.real_y;
  146. var direct;
  147. if (xdist >0)
  148. direct = Math.atan(ydist/xdist); else
  149. direct = Math.atan(ydist/xdist) + 3.14;
  150. return direct;
  151. }
  152. return false;
  153. }
  154. function pointdirection(mx,my)
  155. {
  156. var xdist = mx-character.real_x;
  157. var ydist = my-character.real_y;
  158. var direct;
  159. if (xdist >0)
  160. direct = Math.atan(ydist/xdist); else
  161. direct = Math.atan(ydist/xdist) + 3.14;
  162. return direct;
  163. }
  164.  
  165. function targetdistance(target)
  166. {
  167. if (target)
  168. return Math.pow(Math.pow(character.real_x-target.real_x,2) +
  169. Math.pow(character.real_y-target.real_y,2),1/2);
  170. return false;
  171. }
  172. function pointdistance(mx,my)
  173. {
  174. return Math.pow(Math.pow(character.real_x-mx,2) +
  175. Math.pow(character.real_y-my,2),1/2);
  176. }
  177.  
  178. function moveinrange(target,nexttarget)
  179. {
  180. if (target)
  181. {
  182. if(!in_attack_range(target) || (target.target != character.id && targetdistance(target) > character.range))
  183. {moveindirection(targetdirection(target),targetdistance(target)-
  184. character.range);}
  185. else
  186. {
  187. if(nexttarget && target.hp<character.attack)
  188. {
  189. if(!in_attack_range(nexttarget))
  190. {moveindirection(targetdirection(nexttarget),
  191. targetdistance(nexttarget)-character.range);
  192. }
  193. }
  194. }
  195. }
  196. else
  197. move(character.real_x,character.real_y);
  198. }
  199.  
  200. function run_away(target,distance)
  201. {
  202. if (targetdistance(target)<distance)
  203. move(character.real_x+(distance-targetdistance(target))*Math.cos(targetdirection(target)+3.14),
  204. character.real_y+(distance-targetdistance(target))*Math.sin(targetdirection(target)+3.14));
  205. }
  206.  
  207. var turn_direct=1;
  208. var kitex=character.real_x;
  209. var kitey=character.real_y;
  210. function kiteme(target,distance,kite)
  211. {
  212. switch (kite)
  213. {
  214.  
  215. case 1:
  216. if(target)
  217. kite_type1(target,distance);
  218. break;
  219. case 2:
  220. kite_type2(distance);
  221. break;
  222. case 3:
  223. kite_type3(target)
  224. break
  225. }
  226.  
  227. }
  228.  
  229. function kite_type3(target)
  230. {if(target && target.target==character.id)
  231. move(kitex,kitey)
  232. }
  233.  
  234. function kite_type2(distance)
  235. {
  236. if (pointdistance(kitex,kitey)>distance-5)
  237. {
  238. var x_go=kitex+distance*Math.cos(pointdirection(kitex,kitey)-3.14)+(20)*Math.cos(pointdirection(kitex,kitey)+turn_direct*3.14/2)
  239.  
  240. var y_go=kitey+distance*Math.sin(pointdirection(kitex,kitey)-3.14)+(20)*Math.sin(pointdirection(kitex,kitey)+turn_direct*3.14/2)
  241. }
  242. else
  243. {x_go=kitex+distance*Math.cos(pointdirection(kitex,kitey)-3.14);
  244. y_go=kitey+distance*Math.sin(pointdirection(kitex,kitey)-3.14);}
  245. move(x_go,y_go);
  246.  
  247. }
  248.  
  249. function kite_type1(target,distance)
  250. {
  251. var x_go=character.real_x+(distance-targetdistance(target))*Math.cos(targetdirection(target)+3.14)+(character.speed/5)*Math.cos(targetdirection(target)+turn_direct*3.14/2);
  252. var y_go=character.real_y+(distance-targetdistance(target))*Math.sin(targetdirection(target)+3.14)+(character.speed/5)*Math.sin(targetdirection(target)+turn_direct*3.14/2)
  253. if(can_move_to(x_go,y_go)) move(x_go,y_go);
  254. else
  255. {turn_direct=turn_direct*(-1);
  256. x_go=character.real_x+(distance-targetdistance(target))*Math.cos(targetdirection(target)+3.14)+(character.speed/5)*Math.cos(targetdirection(target)+turn_direct*3.14/2)
  257. y_go=character.real_y+(distance-targetdistance(target))*Math.sin(targetdirection(target)+3.14)+(character.speed/5)*Math.sin(targetdirection(target)+turn_direct*3.14/2)
  258. if(can_move_to(x_go,y_go)) move(x_go,y_go)
  259. else
  260. {turn_direct=turn_direct*(-1);
  261. move(character.real_x+((distance/2)*Math.cos(targetdirection(target))),
  262. character.real_y+((distance/2)*Math.sin(targetdirection(target))));
  263. }
  264. }
  265. }
  266.  
  267.  
  268. function attacktarget(target,nexttarget)
  269. {
  270. if((can_attack(target)) &&
  271. ((character.hp>target.attack) ||
  272. (get_target_of(target)==character.id)))
  273. {
  274. attack(target);
  275. if(target.dead && nexttarget && !current.target)
  276. {change_target(nexttarget);}
  277. }
  278. }
  279.  
  280. function moveindirection(direction,distance)
  281. {
  282. move(character.real_x+distance*Math.cos(direction),
  283. character.real_y+distance*Math.sin(direction));
  284. }
  285.  
  286. function drawstuff(target)
  287. {
  288. clear_drawings();
  289. draw_circle(character.real_x,character.real_y,character.range,.5,0xFFFFFF);
  290. if (target)
  291. draw_circle(target.real_x,target.real_y,G.monsters[target.mtype].range,.5,0xFF0000);
  292. }
  293.  
  294.  
  295. function get_next_nearest_monster(args)
  296. {
  297. //args:
  298. // max_att - max attack
  299. // min_xp - min XP
  300. // target: Only return monsters that target this "name" or player object
  301. // no_target: Only pick monsters that don't have any target
  302. // path_check: Checks if the character can move to the target
  303. var min_d=999999,target=null;
  304.  
  305. if(!args) args={};
  306. if(args && args.target && args.target.name) args.target=args.target.name;
  307.  
  308. for(id in parent.entities)
  309. {
  310. var current=parent.entities[id];
  311. if(current.type!="monster" || args.min_xp && current.xp<args.min_xp || args.max_att && current.attack>args.max_att || args.same_target && current.id == args.same_target || current.dead) continue;
  312. if(args.no_target && current.target && current.target!=character.name) continue;
  313. if(awhitelist.includes(current.mtype) &&(!get_targeted_monster() || !awhitelist.includes(get_targeted_monster().mtupe))) return current;
  314. if(args.monster_type && current.mtype != args.monster_type) continue;
  315. if(args.target && current.target!=args.target) continue;
  316. if(args.path_check && !can_move_to(current)) continue;
  317. var c_dist=parent.distance(character,current);
  318. if(c_dist<min_d)
  319. {min_d=c_dist; target=current;}
  320. if(args.attacking_me && current.target == character.name)
  321. {return current;}
  322.  
  323.  
  324. }
  325. return target;
  326. }
  327.  
  328. function get_player(args)
  329. {
  330. //args:
  331. // max_att - max attack
  332. // min_xp - min XP
  333. // target: Only return monsters that target this "name" or player object
  334. // no_target: Only pick monsters that don't have any target
  335. // path_check: Checks if the character can move to the target
  336. var max_l=0,target=null;
  337.  
  338. if(!args) args={};
  339. if(args && args.target && args.target.name) args.target=args.target.name;
  340.  
  341. for(id in parent.entities)
  342. {
  343. var current=parent.entities[id];
  344. if(current.type=="monster" || current.dead) continue;
  345. var c_level=current.level;
  346. if(c_level>max_l)
  347. {max_l=c_level; target=current;}
  348. }
  349. return target;
  350. }
  351. var lastsupershot;
  352. function supershot(currentTarget) {
  353. //Cast supershot on target whenever you're off cd (cd is 30sec).
  354. if (!lastsupershot || new Date() - lastsupershot > 30000) {
  355. lastsupershot = new Date();
  356. parent.socket.emit("ability", {
  357. name: "supershot",
  358. id: currentTarget.id
  359. });
  360. }
  361. }
  362. var lastburst;
  363. function burst(currentTarget) {
  364. //Cast burst on target whenever you're off cd (cd is 10sec).
  365. if (!lastburst || new Date() - lastburst > 10000) {
  366. lastburst = new Date();
  367. parent.socket.emit("ability", {
  368. name: "burst",
  369. id: currentTarget.id
  370. });
  371. }
  372. }
  373. var lastcurse;
  374.  
  375. function curse(target) {
  376. //Curse only if target hasn't been cursed and if curse is off cd (cd is 5sec).
  377. if ((!lastcurse || new Date() - lastcurse > 5000) && !target.cursed) {
  378. lastcurse = new Date();
  379. parent.socket.emit("ability", {
  380. name: "curse",
  381. id: target.id
  382. });
  383. }
  384. }
  385.  
  386. function exchangeAll() {
  387. for(let slot in character.items) {
  388. let item = character.items[slot];
  389. if(item && G.items[item.name].e && G.items[item.name].e <= item.q) {
  390. parent.exchangeit(slot);
  391. setTimeout(exchangeAll, 750);
  392. return;
  393. }
  394. }
  395. }
  396. if(parent.exchangeit) {
  397. setTimeout(exchangeAll, 1000);
  398. }
  399. else {
  400. console.error("parent.exchangeit not available for the auto-compound script");
  401. }
  402.  
  403.  
  404.  
  405.  
  406. //Setup gui
  407. var gui_tl_gold = false; //Enable kill (or xp) till level & GPH [scripted session] = true, Disable kill (or xp) till level & GPH [scripted session] = false
  408. var gui_timer = false; //Enable time till level [scripted session] = true, Disable time till level [scripted session] = false
  409. var till_level = 0; //Kills till level = 0, XP till level = 1
  410.  
  411.  
  412.  
  413. //GUI stuff
  414. var minute_refresh; //how long before the clock refreshes
  415. var last_target = null;
  416. var gold = character.gold;
  417. var date = new Date();
  418. var p = parent;
  419.  
  420. function init_xptimer(minref) {
  421. minute_refresh = minref || 1;
  422. //p.add_log(minute_refresh.toString() + ' min until tracker refresh!', 0x00FFFF);
  423.  
  424. let $ = p.$;
  425. let brc = $('#bottomrightcorner');
  426.  
  427. brc.find('#xptimer').remove();
  428.  
  429. let xpt_container = $('<div id="xptimer"></div>').css({
  430. background: 'black',
  431. border: 'solid gray',
  432. borderWidth: '5px 5px',
  433. width: '320px',
  434. height: '96px',
  435. fontSize: '28px',
  436. color: '#77EE77',
  437. textAlign: 'center',
  438. display: 'table',
  439. overflow: 'hidden',
  440. marginBottom: '-5px'
  441. });
  442.  
  443. //vertical centering in css is fun
  444. let xptimer = $('<div id="xptimercontent"></div>')
  445. .css({
  446. display: 'table-cell',
  447. verticalAlign: 'middle'
  448. })
  449. .html('Estimated time until level up:<br><span id="xpcounter" style="font-size: 40px !important; line-height: 28px">Loading...</span><br><span id="xprate">(Kill something!)</span>')
  450. .appendTo(xpt_container);
  451.  
  452. brc.children().first().after(xpt_container);
  453. }
  454.  
  455. var last_minutes_checked = new Date();
  456. var last_xp_checked_minutes = character.xp;
  457. var last_xp_checked_kill = character.xp;
  458. //lxc_minutes = xp after {minute_refresh} min has passed, lxc_kill = xp after a kill (the timer updates after each kill)
  459.  
  460. function update_xptimer() {
  461. if (character.xp == last_xp_checked_kill) return;
  462.  
  463. let $ = p.$;
  464. let now = new Date();
  465.  
  466. let time = Math.round((now.getTime() - last_minutes_checked.getTime()) / 1000);
  467. if (time < 1) return; //1s safe delay
  468. let xp_rate = Math.round((character.xp - last_xp_checked_minutes) / time);
  469. if (time > 60 * minute_refresh) {
  470. last_minutes_checked = new Date();
  471. last_xp_checked_minutes = character.xp;
  472. }
  473. last_xp_checked_kill = character.xp;
  474.  
  475. let xp_missing = p.G.levels[character.level] - character.xp;
  476. let seconds = Math.round(xp_missing / xp_rate);
  477. let minutes = Math.round(seconds / 60);
  478. let hours = Math.round(minutes / 60);
  479. let counter = `${hours}h ${minutes % 60}min`;
  480.  
  481. $('#xpcounter').text(counter);
  482. $('#xprate').text(`${ncomma(xp_rate)} XP/s`);
  483. }
  484.  
  485. function initGUI() {
  486. let $ = p.$;
  487. let brc = $('#bottomrightcorner');
  488. let blc = $('#bottomleftcorner2');
  489. $('#xpui').css({
  490. fontSize: '25px',
  491. });
  492.  
  493. brc.find('.xpsui').css({
  494. background: 'url("https://i.imgur.com/zCb8PGK.png")',
  495. backgroundSize: 'cover'
  496. });
  497.  
  498. blc.find('#goldui').remove();
  499. blc.find('#goldgainloss').remove();
  500. let gb = $('<div id="goldui"></div>').css({
  501. background: 'black',
  502. border: 'solid gray',
  503. borderWidth: '5px 5px',
  504. width: '320px',
  505. height: '34px',
  506. lineHeight: '34px',
  507. fontSize: '25px',
  508. color: '#FFD700',
  509. textAlign: 'center',
  510. marginBottom: '-5px'
  511. });
  512. let ggl = $('<div id="goldgainloss"></div>').css({ //gold gain loss
  513. background: 'black',
  514. border: 'solid gray',
  515. borderWidth: '5px 5px',
  516. width: '320px',
  517. height: '34px',
  518. lineHeight: '34px',
  519. fontSize: '25px',
  520. color: '#FFD700',
  521. textAlign: 'center',
  522. marginBottom: '-5px'
  523. });
  524. $('#bottomleftcorner2').prepend(ggl);
  525. $('#bottomleftcorner2').prepend(gb);
  526. }
  527.  
  528. if (till_level === 0)
  529.  
  530. function updateGUI() {
  531. let $ = p.$;
  532. let xp_percent = ((character.xp / p.G.levels[character.level]) * 100).toFixed(2);
  533. let xp_string = `LV${character.level} ${xp_percent}%`;
  534. var goldPerHour = 0;
  535. if (p.ctarget && p.ctarget.type == 'monster') {
  536. last_target = p.ctarget.mtype;
  537. }
  538. if (last_target) {
  539. let xp_missing = p.G.levels[character.level] - character.xp;
  540. let monster_xp = p.G.monsters[last_target].xp;
  541. goldPerHour = Math.round((character.gold - gold) / ((new Date() - date) / 3600000));
  542. let party_modifier = character.party ? 1.5 / p.party_list.length : 1;
  543. let monsters_left = Math.ceil(xp_missing / (monster_xp * party_modifier * character.xpm));
  544. xp_string += ` (${ncomma(monsters_left)} kills to go!)`;
  545. }
  546. $('#xpui').html(xp_string);
  547. $('#goldui').html(goldPerHour.toLocaleString('en-US', {
  548. minimumFractionDigits: 0
  549. }) + " Gold/hour");
  550. $('#goldgainloss').html(ncomma(character.gold - gold) + " Gold gain/lost");
  551. } else if (till_level === 1)
  552.  
  553. function updateGUI() {
  554. let $ = p.$;
  555. let xp_percent = ((character.xp / G.levels[character.level]) * 100).toFixed(2);
  556. let xp_missing = ncomma(G.levels[character.level] - character.xp);
  557. let xp_string = `LV${character.level} ${xp_percent}% (${xp_missing}) xp to go!`;
  558. var goldPerHour = 0;
  559. if (p.ctarget && p.ctarget.type == 'monster') {
  560. last_target = p.ctarget.mtype;
  561. }
  562. goldPerHour = Math.round((character.gold - gold) / ((new Date() - date) / 3600000));
  563. let party_modifier = character.party ? 1.5 / p.party_list.length : 1;
  564. $('#xpui').html(xp_string);
  565. $('#goldui').html(goldPerHour.toLocaleString('en-US', {
  566. minimumFractionDigits: 0
  567. }) + " Gold/hour");
  568. $('#goldgainloss').html(ncomma(character.gold - gold) + " Gold gain/lost");
  569. }
  570.  
  571. function ncomma(x) {
  572. return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  573. }
  574.  
  575.  
  576.  
  577.  
  578.  
  579. function teleport(dest) {
  580. parent.socket.emit('transport', {to:teleDictionary[dest].to,s:teleDictionary[dest].s});
  581. }
  582. var teleDictionary = {
  583. "main" : {to:'main', s:0},
  584. "bank" : {to:'bank', s:0},
  585. "woffice" : {to:'woffice', s:0},
  586. "cave" : {to:'cave', s:0},
  587. "tunnel" : {to:'tunnel', s:0},
  588. "spookyforest" : {to:'halloween', s:0},
  589. "winterland" : {to:'winterland', s:0},
  590. "wbartender" : {to:'wbartender', s:0},
  591. "winter_cave" : {to:'winter_cave', s:0},
  592. "desertland" : {to:'desertland', s:0},
  593. "out_woffice" : {to:'main', s:1},
  594. "armadillos" : {to:'main', s:2},
  595. "out_bank" : {to:'main', s:3},
  596. "bees" : {to:'main', s:4},
  597. "goos" : {to:'main', s:5},
  598. "out_igoo" : {to:'main', s:6},
  599. "tavern" : {to:'main', s:8},
  600. "winterlandinn" : {to:'winterland', s:2},
  601. "out_pompom" : {to:'winterland', s:3},
  602. };
  603.  
  604.  
  605.  
  606.  
  607.  
  608.  
  609. partyup=true;
  610. var pwhitelist = [ 'ColorBoy','Iamanoob','nobodythat','nobodyhere'];
  611.  
  612.  
  613.  
  614.  
  615. if (partyup)
  616. {
  617. parent.window.addEventListener('keydown', (event) => {
  618. var keyName = event.key;
  619. if(keyName == 'p' || keyName == 'P')
  620. {
  621. invite_party_list();
  622. }
  623. }, false);
  624.  
  625. setInterval(function()
  626. {
  627. if(!character.party)
  628. accept_party_list();
  629. },10000);
  630. }
  631.  
  632.  
  633. //Adds all whitelisted party memebers to party
  634. function invite_party_list() {
  635. for (members in pwhitelist) send_party_invite(pwhitelist[members],0);
  636. }
  637.  
  638. //Accepts requests from whitelisted party memebers
  639. function accept_party_list() {
  640. for (members in pwhitelist)
  641. {
  642.  
  643. accept_party_invite(pwhitelist[members]);
  644. }
  645. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement