Advertisement
kolton

Untitled

Feb 8th, 2012
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.54 KB | None | 0 0
  1. function NTA_DetectAttackPattern() {
  2. return NTA_NecromancerAttackPatternInt();
  3. }
  4.  
  5. function NTA_Attack(target, firstorder) {
  6. return NTA_NecromancerAttackInt(target, firstorder);
  7. }
  8.  
  9. function NTA_NecromancerAttackPatternInt() {
  10. return false;
  11. }
  12.  
  13. function NTA_Initialize() {
  14. if (NTConfig_AttackSkill[1] <= -1 || NTConfig_AttackSkill[3] <= -1) {
  15. Print("No attacks were set in your NTConfig_Necromancer_" + me.charname + ".ntl file!");
  16. Print("Please set them then restart the bot");
  17. while (1) {
  18. Delay(500);
  19. }
  20. }
  21. for (var i = 0; i < NTConfig_AttackSkill.length; i++) {
  22. if (NTConfig_AttackSkill[i] > -1) {
  23. _NTA_SkillHand[i] = GetBaseStat("skills.txt", NTConfig_AttackSkill[i], 166) ? 2 : NTC_HAND_RIGHT;
  24. _NTA_SkillDamage[i] = NTA_GetDamageType(NTConfig_AttackSkill[i]);
  25.  
  26. switch (NTConfig_AttackSkill[i]) {
  27. case 0:
  28. //Normal Attack
  29. if (NTA_RangedNormal()) {
  30. _NTA_SkillRange[i] = 20;
  31. } else {
  32. _NTA_SkillRange[i] = 2;
  33. }
  34. break;
  35. case 1:
  36. //Kicks
  37. _NTA_SkillRange[i] = 2;
  38. break;
  39. case 5:
  40. // Left Hand Swing
  41. _NTA_SkillRange[i] = 2;
  42. break;
  43. case 84:
  44. // Bone Spear
  45. _NTA_SkillRange[i] = 15;
  46. break;
  47. case 91:
  48. //Lower Resist
  49. _NTA_SkillRange[i] = 50;
  50. break;
  51. case 92:
  52. // Poison Nova
  53. _NTA_SkillRange[i] = 15;
  54. break;
  55. case 93:
  56. //Bone Spirit
  57. _NTA_SkillRange[i] = 15;
  58. break;
  59. case 95:
  60. //Revive
  61. _NTA_SkillRange[i] = 20;
  62. break;
  63. case 96:
  64. //Sacrifice
  65. break;
  66. default:
  67. _NTA_SkillRange[i] = 25;
  68. break;
  69. }
  70. }
  71. }
  72. for (var i = 0 ; i < 2 ; i+= 1) {
  73. if (NTConfig_Curse[i] > 0) {
  74. switch (NTConfig_Curse[i]) {
  75. case 0: //nothing
  76. _NTA_CurseState[i] = 0;
  77. break;
  78. case 66: //amplify damage
  79. _NTA_CurseState[i] = 9;
  80. break;
  81. case 71: //dim vision
  82. _NTA_CurseState[i] = 23;
  83. break;
  84. case 72: //weaken
  85. _NTA_CurseState[i] = 19;
  86. break;
  87. case 76: //iron maiden
  88. _NTA_CurseState[i] = 55;
  89. break;
  90. case 77: //terror
  91. _NTA_CurseState[i] = 56;
  92. break;
  93. case 81: //confuse
  94. _NTA_CurseState[i] = 59;
  95. break;
  96. case 82: //life tap
  97. _NTA_CurseState[i] = 58;
  98. break;
  99. case 86: //attract
  100. _NTA_CurseState[i] = 57;
  101. break;
  102. case 87: //decrepify
  103. _NTA_CurseState[i] = 60;
  104. break;
  105. case 91: //lower resist
  106. _NTA_CurseState[i] = 61;
  107. break;
  108. default:
  109. NTConfig_Curse[i] = 0;
  110. Print("Invalid curse id");
  111. break;
  112. }
  113. }
  114. }
  115. }
  116.  
  117. function NTA_NecromancerAttackInt(target, firstorder) {
  118. var _primaryindex;
  119.  
  120. if ((NTTMGR_CheckCurse(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe, true)) || (me.hp <= parseInt(me.hpmax * NTConfig_TPChicken,10) / 100)) {
  121. if (!NTTMGR_VisitTown()) {
  122. return 0;
  123. }
  124. }
  125.  
  126. if (NTT_CheckMerc()) { // merc revive
  127. NTTMGR_VisitTown();
  128. }
  129.  
  130. if (!me.GetState(14)) { //check and recast bone armor
  131. NTC_CastSkill(68, NTC_HAND_RIGHT);
  132. }
  133.  
  134. if (firstorder && NTConfig_AttackSkill[0] > -1 && NTA_GetResistance(target, _NTA_SkillDamage[0]) < 100 && me.GetSkillStatus(NTConfig_AttackSkill[0]) != 8) {
  135. if (GetDistance(me, target) > _NTA_SkillRange[0] || !CheckCollision(me, target, 4)) {
  136. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[0], 4);
  137.  
  138. if (_pos) {
  139. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  140. }
  141. }
  142.  
  143. if (!NTC_CastSkill(NTConfig_AttackSkill[0], _NTA_SkillHand[0], target)) {
  144. return 2;
  145. }
  146.  
  147. return 3;
  148. }
  149.  
  150. if (NTConfig_Curse[0] > 0 && target.spectype & 0x0A && !target.GetState(_NTA_CurseState[0]) && NTA_IsCursable(target))
  151. {
  152. if (GetDistance(me, target) > 25 || !CheckCollision(me, target, 4)) {
  153. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, 25, 4);
  154.  
  155. if (_pos) {
  156. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  157. }
  158. }
  159.  
  160. NTC_CastSkill(NTConfig_Curse[0], NTC_HAND_RIGHT, target);
  161. }
  162. else if (NTConfig_Curse[1] > 0 && !(target.spectype&0x0A) && !target.GetState(_NTA_CurseState[1]) && NTA_IsCursable(target)) {
  163. if (GetDistance(me, target) > 25 || !CheckCollision(me, target, 4)) {
  164. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, 25, 4);
  165.  
  166. if (_pos) {
  167. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  168. }
  169. }
  170.  
  171. NTC_CastSkill(NTConfig_Curse[1], NTC_HAND_RIGHT, target);
  172. }
  173.  
  174. _primaryindex = (target.spectype & 0x0A) ? 1 : 3;
  175.  
  176. if (NTA_GetResistance(target, _NTA_SkillDamage[_primaryindex]) < 100) {
  177. if (NTConfig_TeleStomp && _primaryindex === 1) {
  178. NTM_GetCloserInt(target);
  179. }
  180.  
  181. if (!NTA_NecromancerCastSkillInt(_primaryindex, target)) {
  182. return 2;
  183. }
  184.  
  185. if (NTConfig_ActiveSummon) {
  186. if (NTA_SkeletonArmy(NTConfig_SkeletonArmy)) {
  187. if (NTA_MageArmy(NTConfig_MageArmy)) {
  188. if (NTA_ReviveArmy(NTConfig_ReviveArmy)) {
  189. NTA_ExplodeCorpses(target);
  190. }
  191. }
  192. }
  193. } else {
  194. NTA_ExplodeCorpses(target);
  195. }
  196.  
  197. return 3;
  198. }
  199.  
  200. if (NTConfig_AttackSkill[5] > -1 && NTA_GetResistance(target, _NTA_SkillDamage[5]) < 100) {
  201. if (!NTA_NecromancerCastSkillInt(5, target)) {
  202. return 2;
  203. }
  204.  
  205. if (NTConfig_ActiveSummon) {
  206. if (NTA_SkeletonArmy(NTConfig_SkeletonArmy)) {
  207. if (NTA_MageArmy(NTConfig_MageArmy)) {
  208. if (NTA_ReviveArmy(NTConfig_ReviveArmy)) {
  209. NTA_ExplodeCorpses(target);
  210. }
  211. }
  212. }
  213. } else {
  214. NTA_ExplodeCorpses(target);
  215. }
  216.  
  217. return 3;
  218. }
  219.  
  220. if (NTConfig_TeleStomp && NTC_GetMerc() && NTA_GetResistance(target, NTA_DAMAGE_PHYSICAL) < 100) {
  221. NTM_GetCloserInt(target);
  222.  
  223. if (target.mode === 12) {
  224. return 2;
  225. }
  226.  
  227. NTC_Delay(300);
  228.  
  229. if (NTConfig_ActiveSummon) {
  230. if (NTA_SkeletonArmy(NTConfig_SkeletonArmy)) {
  231. if (NTA_MageArmy(NTConfig_MageArmy)) {
  232. if (NTA_ReviveArmy(NTConfig_ReviveArmy)) {
  233. NTA_ExplodeCorpses(target);
  234. }
  235. }
  236. }
  237. } else {
  238. NTA_ExplodeCorpses(target);
  239. }
  240.  
  241. return 3;
  242. }
  243.  
  244. return 1;
  245. }
  246.  
  247. function NTA_NecromancerCastSkillInt(index, target) {
  248. if (NTConfig_AttackSkill[index] === 92) {
  249. if (!_NTA_NovaTick || GetTickCount() > _NTA_NovaTick + NTConfig_PoisonNovaDelay) {
  250. if (GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4)) {
  251. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);
  252.  
  253. if (_pos) {
  254. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  255. }
  256. }
  257.  
  258. _NTA_NovaTick = GetTickCount();
  259.  
  260. return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
  261. }
  262. } else if (me.GetSkillStatus(NTConfig_AttackSkill[index]) != 8) {
  263. if (GetDistance(me, target) > _NTA_SkillRange[index] || !CheckCollision(me, target, 4)) {
  264. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index], 4);
  265.  
  266. if (_pos) {
  267. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  268. }
  269. }
  270.  
  271. return NTC_CastSkill(NTConfig_AttackSkill[index], _NTA_SkillHand[index], target);
  272. }
  273.  
  274. if (NTConfig_AttackSkill[index+1] > -1) {
  275. if (GetDistance(me, target) > _NTA_SkillRange[index+1] || !CheckCollision(me, target, 4)) {
  276. var _pos = me.GetOptimalAttackPos(target.areaid, target.x, target.y, _NTA_SkillRange[index+1], 4);
  277.  
  278. if (_pos) {
  279. NTM_MoveTo(target.areaid, _pos[0], _pos[1], 0);
  280. }
  281. }
  282.  
  283. return NTC_CastSkill(NTConfig_AttackSkill[index+1], _NTA_SkillHand[index+1], target);
  284. }
  285.  
  286. for (var i = 0; i < 25; i+= 1) {
  287. NTC_Delay(NTC_DELAY_FRAME);
  288.  
  289. if (me.GetSkillStatus(NTConfig_AttackSkill[index]) != 8 && (GetTickCount() > _NTA_NovaTick + NTConfig_PoisonNovaDelay || !_NTA_NovaTick)) {
  290. break;
  291. }
  292. }
  293.  
  294. return false;
  295. }
  296.  
  297. function NTA_IsCursable(target) {
  298. if (target.name.indexOf(GetLocaleString(11086)) != -1) { // Possessed
  299. return false;
  300. }
  301.  
  302. switch (target.classid) {
  303. case 206: // Foul Crow Nest
  304. case 258: // Water Watcher
  305. case 261: // Water Watcher
  306. case 266: // Flavie
  307. return false;
  308. }
  309.  
  310. return true;
  311. }
  312.  
  313. function NTA_SkeletonArmy(num)
  314. {
  315. if (num <= 0) {
  316. return true;
  317. }
  318.  
  319. if (NTA_GetMinionCount(0) >= num) {
  320. return true;
  321. }
  322.  
  323. for (var i = 0; i < 5; i += 1) {
  324. var corpse = NTC_FindUnit(NTC_UNIT_MONSTER);
  325.  
  326. if (corpse) {
  327. do {
  328. if (NTA_IsValidCorpse(corpse)) {
  329. if (NTA_GetMinionCount(0) >= num) {
  330. return true;
  331. }
  332.  
  333. //Print("Skeleton Raising " + corpse.classid + " " + corpse.name);
  334.  
  335. NTC_CastSkill(70, NTC_HAND_RIGHT, corpse);
  336. }
  337. } while (corpse.GetNext());
  338. } else {
  339. break;
  340. }
  341. }
  342.  
  343. return false;
  344. }
  345.  
  346. function NTA_MageArmy(num) {
  347. if (num <= 0) {
  348. return true;
  349. }
  350.  
  351. if (NTA_GetMinionCount(1) >= num) {
  352. return true;
  353. }
  354.  
  355. for (var i = 0; i < 5; i += 1) {
  356. var corpse = NTC_FindUnit(NTC_UNIT_MONSTER);
  357.  
  358. if (corpse) {
  359. do {
  360. if (NTA_IsValidCorpse(corpse)) {
  361. if (NTA_GetMinionCount(1) >= num) {
  362. return true;
  363. }
  364.  
  365. //Print("Mage Raising " + corpse.classid + " " + corpse.name);
  366.  
  367. NTC_CastSkill(80, NTC_HAND_RIGHT, corpse);
  368. }
  369. } while (corpse.GetNext());
  370. } else {
  371. break;
  372. }
  373. }
  374.  
  375. return false;
  376. }
  377.  
  378. function NTA_ReviveArmy(num) {
  379. if (num <= 0) {
  380. return true;
  381. }
  382.  
  383. if (NTA_GetMinionCount(2) >= num) {
  384. return true;
  385. }
  386.  
  387. for (var i = 0; i < 5; i += 1) {
  388. var corpse = NTC_FindUnit(NTC_UNIT_MONSTER);
  389.  
  390. if (corpse) {
  391. do {
  392. if(NTA_IsValidCorpse(corpse, true)) {
  393. if (NTA_GetMinionCount(2) >= num) {
  394. return true;
  395. }
  396.  
  397. //Print("Reviving " + corpse.classid + " " + corpse.name);
  398.  
  399. NTC_CastSkill(95, NTC_HAND_RIGHT, corpse);
  400. }
  401. } while (corpse.GetNext());
  402. } else {
  403. break;
  404. }
  405. }
  406.  
  407. return false;
  408. }
  409.  
  410. function NTA_ExplodeCorpses(target) {
  411. if (NTConfig_ExplodeCorpses === 0 || target.hp === 0 || target.mode === 0 || target.mode === 12) {
  412. return false;
  413. }
  414.  
  415. var exploded = 0,
  416. corpse = NTC_FindUnit(NTC_UNIT_MONSTER);
  417.  
  418. if (corpse) {
  419. do {
  420. if (GetDistance(corpse, target) <= 10 && NTA_IsValidCorpse(corpse)) {
  421. //Print("Exploding " + corpse.classid + " " + corpse.name);
  422.  
  423. if (NTC_CastSkill(NTConfig_ExplodeCorpses, NTC_HAND_RIGHT, corpse)) {
  424. exploded++;
  425. }
  426.  
  427. if (exploded >= 2) {
  428. return false;
  429. }
  430. }
  431. } while (corpse.GetNext());
  432. }
  433.  
  434. return true;
  435. }
  436.  
  437. function NTA_IsValidCorpse(unit, revive) {
  438. if (arguments.length < 2) {
  439. revive = false;
  440. }
  441.  
  442. var badList = [462, 571];
  443.  
  444. if (revive && unit.spectype & 0x0A || badList.indexOf(unit.classid) !== -1) {
  445. return false;
  446. }
  447.  
  448. if ((unit.hp === 0 || unit.mode === 0 || unit.mode === 12) && GetDistance(me, unit) <= 25 && CheckCollision(me, unit, 4) &&
  449. !unit.GetState(1) && // freeze
  450. !unit.GetState(96) && // revive
  451. !unit.GetState(99) && // redeemed
  452. !unit.GetState(104) && // nodraw
  453. !unit.GetState(107) && // shatter
  454. !unit.GetState(118) && // noselect
  455. GetBaseStat("monstats2.txt", unit.classid, revive ? 97 : 95)) { // non selectable and non revivable monsters
  456. return true;
  457. }
  458.  
  459. return false;
  460. }
  461.  
  462. function NTA_GetMinionCount(type) { // 0 - skeleton, 1 - mage, 2 - revive
  463. var minion,
  464. num = 0;
  465.  
  466. switch (type) {
  467. case 0:
  468. minion = NTC_FindUnit(NTC_UNIT_MONSTER, 363);
  469. break;
  470. case 1:
  471. minion = NTC_FindUnit(NTC_UNIT_MONSTER, 364);
  472. break;
  473. case 2:
  474. minion = NTC_FindUnit(NTC_UNIT_MONSTER);
  475. break;
  476. }
  477.  
  478. if (minion) {
  479. do {
  480. if (NTC_CheckOwner(minion) && minion.hp > 0) {
  481. if (type === 2) {
  482. if (minion.GetState(96)) {
  483. num += 1;
  484. }
  485. } else {
  486. num += 1;
  487. }
  488. }
  489. } while (minion.GetNext());
  490. }
  491.  
  492. return num;
  493. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement