Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.54 KB | None | 0 0
  1. var blacklist = ['chin', 'Arcuz', 'Sieghart', 'Spadar', 'jane1', 'SixSix', 'Choko', "Glass"];
  2.  
  3. var clock = 0, lastability = 0, target;
  4. setInterval(function()
  5. {
  6. drawstuff(get_targeted_monster());
  7. },10);
  8. function drawstuff(target)
  9. {
  10. clear_drawings();
  11. draw_circle(character.real_x,character.real_y,character.range,.5,0xF00F);
  12. if (target)
  13. draw_circle(target.real_x,target.real_y,G.monsters[target.mtype].range,.5,0xFF0000);
  14. }
  15. function SeekAndDestroy() {
  16. var lowest_health = lowest_health_partymember();
  17. //If we have a target to heal, heal them. Otherwise attack a target.
  18. if (lowest_health.health < 0.75) {
  19. if (distance_to_point(lowest_health.real_x, lowest_health.real_y) < character.range) {
  20. heal(lowest_health);
  21. }
  22. else {
  23. move_to_target(lowest_health);
  24. }
  25. }
  26.  
  27. if(character.hp<character.max_hp-200) parent.use('hp')
  28. if(character.mp<character.max_mp-300) parent.use('mp')
  29. clock = Date.now();
  30.  
  31. if ( clock < parent.next_attack.getTime() ) return;
  32.  
  33. // Search for characters to attack first (PVP)
  34.  
  35. for ( var playername of blacklist ) {
  36.  
  37. target = get_player(playername);
  38.  
  39. if ( !target ) continue;
  40.  
  41. if ( target.type != "character" || target.rip || !target.hp ) continue;
  42.  
  43. set_message("Attacking "+target.name);
  44.  
  45. if ( !in_attack_range(target) ) {
  46.  
  47. move(
  48.  
  49. character.real_x+(target.real_x-character.real_x),
  50.  
  51. character.real_y+(target.real_y-character.real_y)
  52.  
  53. );
  54.  
  55. } else if ( target && target.hp && !target.dead ) {
  56.  
  57. Ability();
  58.  
  59. parent.player_attack.call(target);
  60.  
  61. last_attack = clock;
  62.  
  63. }
  64.  
  65. parent.ctarget= target;
  66.  
  67.  
  68.  
  69. //Use a potion
  70.  
  71. return; // No need to continue.
  72.  
  73. }
  74.  
  75.  
  76.  
  77. // Monster attack as a fallback
  78.  
  79. target = get_nearest_monster({min_xp:50,max_att:character.attack});
  80.  
  81. if ( !target ) return;
  82.  
  83. set_message("Hunting "+target.name);
  84.  
  85. if ( !in_attack_range(target) ) {
  86.  
  87. move(
  88.  
  89. character.real_x+(target.real_x-character.real_x),
  90.  
  91. character.real_y+(target.real_y-character.real_y)
  92.  
  93. );
  94.  
  95. } else if ( target && target.hp && !target.dead ) {
  96.  
  97. Ability();
  98.  
  99. parent.monster_attack.call(target);
  100.  
  101. last_attack = clock;
  102.  
  103. }
  104. // Use a potion
  105.  
  106.  
  107.  
  108. parent.ctarget = target;
  109.  
  110. shift(41,'goldbooster');
  111.  
  112. loot();
  113.  
  114. shift(41,'xpbooster');
  115.  
  116.  
  117.  
  118. }
  119.  
  120. setInterval(function(){SeekAndDestroy()},350); // Timer every .35 sec
  121.  
  122.  
  123.  
  124. function Ability() {
  125.  
  126. if ( clock < lastability + 15000 ) return;
  127.  
  128. lastability = clock;
  129.  
  130. switch ( character.ctype ) {
  131.  
  132. case "warrior":
  133.  
  134. parent.socket.emit("ability",{name:"charge"});
  135.  
  136. if ( parent.ctarget ) parent.socket.emit("ability",{name:"taunt",id:parent.ctarget.id});
  137.  
  138. return true;
  139.  
  140. case "rogue":
  141.  
  142. parent.socket.emit("ability",{name:"invis"});
  143.  
  144. return true;
  145.  
  146. }
  147.  
  148. if ( !parent.ctarget ) return false;
  149.  
  150. switch ( character.ctype ) {
  151.  
  152. case "mage":
  153.  
  154. parent.socket.emit("ability",{name:"burst",id:parent.ctarget.id});
  155.  
  156. return true;
  157.  
  158. case "priest":
  159.  
  160. parent.socket.emit("ability",{name:"curse",id:parent.ctarget.id});
  161.  
  162. return true;
  163.  
  164. case "ranger":
  165.  
  166. parent.socket.emit("ability",{name:"supershot",id:parent.ctarget.id});
  167.  
  168. return true;
  169.  
  170. }
  171.  
  172. return false;
  173.  
  174. }
  175.  
  176. function NextTarget() {
  177.  
  178. var min_xp = 50;
  179.  
  180. var max_attack = character.attack * 0.75;
  181.  
  182. for( id in parent.entities ) { // Search only in range first
  183.  
  184. var current = parent.entities[id];
  185.  
  186. if ( !current || current.type != "monster" || current.dead ) continue;
  187.  
  188. if ( current.xp<min_xp || current.attack>=max_attack ) continue;
  189.  
  190. var c_dist = parent.distance(character,current);
  191.  
  192. if ( c_dist <= character.range ) return current;
  193.  
  194. }
  195.  
  196. target = get_nearest_monster({min_xp:min_xp,max_att:max_attack});
  197.  
  198. }
  199.  
  200. //leech: setInterval(function(){respawn();},1500);
  201. partyup=true;
  202.  
  203. var pwhitelist = ['Harold','Saboth', 'nobodyhere', 'nobodytanks'];
  204.  
  205. if (partyup)
  206. {
  207. parent.window.addEventListener('keydown', (event) => {
  208. var keyName = event.key;
  209. if(keyName == 'p' || keyName == 'P')
  210. {
  211. invite_party_list();
  212. request_party_list()
  213. }
  214. }, false);
  215.  
  216. setInterval(function()
  217. {
  218. accept_party_list();
  219. },20000);
  220. }
  221.  
  222.  
  223. //Adds all whitelisted party memebers to party
  224. function invite_party_list() {
  225. for (members in pwhitelist) send_party_invite(pwhitelist[members],0);
  226. }
  227.  
  228. //Accepts requests from whitelisted party memebers
  229. function accept_party_list() {
  230. for (members in pwhitelist)
  231. {
  232. accept_party_request(pwhitelist[members]);
  233. accept_party_invite(pwhitelist[members]);
  234. }
  235. }
  236. function request_party_list() {
  237. for (members in pwhitelist) send_party_request(pwhitelist[members],0)
  238. }
  239. for (members in pwhitelist) send_party_invite(pwhitelist[members],0)
  240.  
  241. for (members in pwhitelist) send_party_request(pwhitelist[members],0);
  242.  
  243.  
  244. //Returns the party member with the lowest hp -> max_hp ratio.
  245. function lowest_health_partymember() {
  246. var party = ['Saboth', 'Harold', 'nobodutanks'];
  247. if (parent.party_list.length > 0) {
  248. var party = parent.party_list.map(
  249. function (member) {
  250. return {
  251. name: member,
  252. entity: parent.entities[member]
  253. }
  254. });
  255. }
  256. else {
  257. //Player is not in a party
  258. party.push(
  259. {
  260. name: character.name,
  261. entity: character
  262. });
  263. }
  264.  
  265. //Populate health percentages
  266. for (id in party) {
  267. var member = party[id];
  268.  
  269. if (member.name == character.name) {
  270. member.entity = character;
  271. }
  272.  
  273. if (member.entity != null) {
  274. member.health = member.entity.hp / member.entity.max_hp;
  275. }
  276. else {
  277. member.health = 1;
  278. }
  279. }
  280.  
  281. //Order our party array by health percentage
  282. party.sort(function (current, next) {
  283. return current.health - member.health;
  284. });
  285.  
  286. //Return the lowest health
  287. return party[0].entity;
  288. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement